kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。 Ubuntuの最新情報も紹介しています。

リベースがリポジトリーを共有しているユーザーに与える影響の例

  「リベース」が、リポジトリーを共有しているユーザーに与える影響の例です。
  共有しているリポジトリーの管理者が自分であっても、他のユーザーへの影響を配慮する必要があります。

  ここでは、共有しているリポジトリーを利用しているAさんが、どういう状況でどう困るのかを見てみます。

  1.リモートリポジトリーの状況

    「リモートリポジトリー」は、以下のようになっています。


    このリポジトリーは共有されており、Aさんはこのリポジトリーで作業を行うため、リポジトリーをAさんのPCにコピー(クローン)します。

  2.Aさんが作業を行う(Aさんのローカルリポジトリー)

    「リモートリポジトリー」をクローンし、Aさんは自分の「ローカルリポジトリー」で「My」ブランチを作成しました。

    Aさんは「My」ブランチで、2回コミットを行いました。
    「Commit2」と「Commit3」です。


  3.リモートリポジトリーが変更される(リモートリポジトリー)

    別のユーザーであるBさんが、Bさんの「ローカルリポジトリー」で行った作業を、「リモートリポジトリー」に反映しました。

    「リモートリポジトリー」は、以下のようになりました。


    「Commit4」と「Commit5」をマージして、「Commit6」を生成しています。
    この時点で、Aさんのリポジトリーは「2.」のままです。

  4.リモートリポジトリーのフェッチ(Aさんのローカルリポジトリー)

    ここでAさんは、「リモートリポジトリー」が変更されていることに気づき、作業も一区切りついたので、「リモートリポジトリー」をフェッチしました。

    Aさんは、「リモートリポジトリー」で行われた変更内容を、自分のブランチに取り込みたいと考え、「origin/master」ブランチと「My」ブランチをマージしました。


    「Commit7」はマージコミットです。

  5.コミットの取り消しとリベース(リモートリポジトリー)

    その後Bさんが、「3.」で行った変更を取り消しリベースを行いました。
    まず「Commit6」を取り消し、「Commit5」と「Commit4」が存在するブランチをリベースしました。

    リベース元のブランチは、「Commit4」があるブランチです。
    リベース先のブランチは、「Commit5」があるブランチです。


    「Commit6」を取り消したので、「Commit6」は削除されました。
     リベースを行ったので「Commit4」は削除され、「Commit4’」が生成されました。

    この時点で、Aさんのリポジトリーは「4.」のままです。

  6.リモートリポジトリーをフェッチ(Aさんのローカルリポジトリー)

    Aさんは、「リモートリポジトリー」をフェッチしました。
    すると、Aさんの「ローカルリポジトリー」は、以下のようになります。


    サーバのリポジトリーでは削除されたはずの「Commit4」と「Commit6」が、Aさんの「ローカルリポジトリー」では有効なままです。

  7.ブランチのマージ(Aさんのローカルリポジトリー)

    Aさんは、「My」ブランチでの作業が完了しました。
    Aさんは、自分が行った作業を「リモートリポジトリー」へ反映するため、「origin/master」ブランチと「My」ブランチをマージしました。
   
    Aさんのリポジトリーは、以下のようになります。


    「Commit8」はマージコミットです。

  8.ログの確認(Aさんのローカルリポジトリー)

    Aさんは、自分が行った作業を「リモートリポジトリー」へ反映する前に、自分が行った変更内容と矛盾する変更内容がないか、 変更履歴を確認しました。
   
    この時、全く同じ変更内容が2つ表示されます。
    「Commit4」の変更内容と「Commit4’」の変更内容です。

    Aさんは混乱し、何が起きているのかよく分からない状況になります。

  9.リモートリポジトリーへ反映(Aさんのローカルリポジトリー)

    ここでもしAさんが、そのまま自分の「ローカルリポジトリー」を「リモートリポジトリー」に反映させたとします。

    そうすると、Bさんが削除したはずの「Commit4」と「Commit6」が「リモートリポジトリー」に追加されます。

    こうなると、今度は他のユーザーもAさんと同じ混乱状況になります。

履歴の上書き

  上記の例では、各ユーザーが異なる「リモートリポジトリー」の履歴を「ローカルリポジトリー」に保持していたため、「リモートリポジトリー」の履歴の上書きがAさんとBさんの間で行われていました。

  マージは履歴を追加していくため、ユーザーは新規に追加された履歴を確認すれば、何が変更されたのかを把握し易くなります。

  一方リベースは履歴を改変してしまうため、ユーザーは新規に追加された履歴だけでなく、過去の履歴がどう変わったのか把握する必要があります。


関連コンテンツ
同一カテゴリーの記事
コメント
オプション