kledgeb UbuntuやLinuxの最新情報を紹介

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

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

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

  ここでは、共有しているリポジトリーを利用している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さんの間で行われていました。

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

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


Git
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 22.04 その95 - ディスプレイサーバーを切り替えるには・XorgとWayland
    ディスプレイサーバーを切り替えるには 「Ubuntu」はデフォルトで2種類のディスプレイサーバーを提供しています。
  • Ubuntu 24.04 その70 - Ubuntu 24.04.4 LTS のリリーススケジュール
    Ubuntu 24.04.4 LTS のリリーススケジュール Ubuntu 24.04.4 LTS のリリーススケジュールを紹介します。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • Ubuntu 26.04 その9 - Ubuntu Desktop 26.04 LTS の開発方針・プリインストールアプリの変更やソフトウェア管理の一元化など
    Ubuntu Desktop 26.04 LTS の開発方針 2025年11月26日、Ubuntu Desktop 26.04 LTS の開発方針がアナウンスされました。
  • Ubuntu 22.04 その98 - 入力ソースとキーボートレイアウトと日本語入力のカスタマイズ
    入力ソースとキーボートレイアウトと日本語入力 「Ubuntu」ではユーザーが利用しているキーボードレイアウトや日本語入力のカスタマイズが可能です。
  • Ubuntu nano その5 - 文字列を検索する
    文字列を検索する(Where Is)   文字列の検索は、部分一致と正規表現による検索が可能です。 検索の開始始点   現在カーソルのある位置から検索を行います。   もし、テキストの最後まで検索して文字が見つからない場合、   nanoはテキストの先頭から検索...
  • VirtualBox その125 - ゲストOSのUbuntuにLinux Guest Additionsをインストールするには
    ゲストOSのUbuntuにLinux Guest Additionsをインストールするには 仮想マシンにインストールしたゲストOSの「Ubuntu」に、「Linux Guest Additions」をインストールする方法です。
  • Ubuntu 22.04 LTSのインストール その5 - UEFI環境でパーティションの作成と構成 〜 ブートローダーのインストール先の選択
    UEFI環境でパーティションの作成と構成を行う UEFI環境でパーティションの作成と構成を行います。
  • Ubuntu 22.04 その99 - 日本語入力(Mozc)の設定をカスタマイズして作業効率を上げよう
    日本語入力(Mozc)の設定をカスタマイズするには 「Ubuntu」では日本語入力に「Mozc」を採用しています。
記事のピックアップ
オプション