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

Ubuntu Git その324 - リモートリポジトリーの履歴がリベースにより変わってしまった時は

リモートリポジトリーの履歴がリベースにより変わってしまった時は

  前回紹介した「リベースがリポジトリーを共有しているユーザーに与える影響の例」のように、もし他の人が「リモートリポジトリー」の既存の履歴を「リベース」により変更してしまうと、自分の「ローカルリポジトリー」の履歴と合わなくなる場合があります。

  まず、この状況に気づくことが大切です。
  この状況に気づいたら、現状を把握します。

  「リモートリポジトリー」の、どの履歴が変更されたのか、自分の「ローカルリポジトリー」の履歴とはどこが違うのか、違いを把握する必要があります。

  ここで例として紹介するリポジトリーの履歴は、「リベースがリポジトリーを共有しているユーザーに与える影響の例」を参考にしてください。

マージの代わりにリベースしてみる

  前回紹介した例では、Aさんは「My」ブランチと「リモートトラッキングブランチ」の「origin/master」ブランチを「マージ」 していました。
  ここでは、「Git」に履歴を自動的に把握してもらい、「リベース」を行う流れを紹介します。

  「Git」では履歴の状況を把握し、自分のコミットを変更履歴のリベースを行う機能を提供しています。

  この方法は、「リモートトラッキングブランチ」に自分のブランチを「リベース」します。

  注意

    これは1つの方法ですが、必ずしも適切な方法とは限りません。
   
    「リモートリポジトリー」の既存の履歴が変わってしまった時に、どう対処するのが良い方法なのか、手段の検討は必要です。

  1.現在のリモートリポジトリーの状態

    現在の「リモートリポジトリー」は、以下のようになっています。
    「5.コミットの取り消しとリベース(リモートリポジトリー)」の状態です。


  2.Aさんのローカルリポジトリー

    Aさんの「ローカルリポジトリー」は、以下のようになっています。
    「6.リモートリポジトリーをフェッチ(Aさんのローカルリポジトリー)」の状態です。


  3.リベースを行う(Aさんのローカルリポジトリー)

    Aさんは、「My」ブランチを「origin/master」ブランチに「リベース」します。

    リベース元は「My」ブランチです。
    リベース先は「origin/master」ブランチです。
    ここから先は「Git」が処理を行います。

  4.違いの検出(Aさんのローカルリポジトリー)

    まず「Git」は、Aさんの「ローカルリポジトリー」にしかない「コミットオブジェクト」を検出します。
    以下のコミットが、Aさんの「ローカルリポジトリー」にしかない「コミットオブジェクト」です。

  • Commit2
  • Commit3
  • Commit4
  • Commit6
  • Commit7


  5.マージコミットの除外(Aさんのローカルリポジトリー) 

    次に「マージコミット」 を除外します。
    「Commit6」と「Commit7」は「マージコミット」 です。

    以下のコミットに絞られます。

  • Commit2
  • Commit3
  • Commit4


  6.変更された変更履歴にあるコミットを除外(Aさんのローカルリポジトリー)

    Bさんによって変更された履歴にある「コミットオブジェクト」を検出し、その「コミットオブジェクト」を除外します。
    「Commit4」と「Commit4’」は同じ変更内容(重複している)なので、「Commit4」を除外します。

    以下のコミットに絞られます。

  • Commit2
  • Commit3


  7.リベース完了(Aさんのローカルリポジトリー)

    抽出した 「Commit2」と「Commit3」を「Commit4’」に結合します。
    もし「マージコンフリクト」が発生したら、通常のリベース時と同じように、ユーザーがコンフリクトの解消を行う必要があります。


    これで変更履歴がスッキリしました。
    「7.ブランチのマージ(Aさんのローカルリポジトリー)」と比較してみてください。

期待通りに動作しないこともある

  「リベース」は万能ではありません。
  「コミットオブジェクト」の変更内容が同じであるかどうかを自動検出する過程において、自動検出が期待通りに行われないこともあります。

  上記の「6.変更された変更履歴にあるコミットを除外」で、「Commit4」と「Commit4’」の変更内容が異なると判断された場合、ユーザーの期待通りに検出が行われません。

  この場合、ユーザーが期待する結果とは異なる結果になります。
  「マージ」 にせよ「リベース」にせよ、結局ユーザーがどう対処したほうがいいのかを検討し、結果が期待通りの内容になっているか確認する必要があります。

  このように、「リベース」による「リモートリポジトリー」の履歴の改変が、面倒な結果につながる可能性があるということを、よく理解しておく必要があります。


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」を採用しています。
記事のピックアップ
オプション