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

Recursiveマージストラテジーで、マージするブランチのファイルの差分を優先してマージする

  「Recursiveマージストラテジー」では、マージするブランチの差分を優先してマージすることができます。

  これを利用すると、コンフリクトが発生した差分は、常にマージするブランチのファイルの差分が優先されるようになります。

  コンフリクトが発生しなかった差分は、通常通りマージされます。

マージコンフリクトの発生状況

  比較のため、まず通常のマージで発生する「マージコンフリクト」の中身を見てみます。

  1.ブランチの確認

    現在のブランチ構成を確認すると、以下のようになっています。
    現在のブランチは、「master」ブランチであることが分かります。
    同様に、「HEAD」は「master」ブランチを指していることが分かります。


    ここでは例として、「master」ブランチに「fix」ブランチをマージします。

  2.ブランチの状態

    ブランチの状態を図にすると、以下のようになります。


  3.masterブランチのcommon.txtの中身

    「master」ブランチのcommon.txtの中身は、以下のようになっています。


  4.fixブランチのcommon.txtの中身

    「fix」ブランチのcommon.txtの中身は、以下のようになっています。


  5.マージを行う

    「master」ブランチに「fix」ブランチをマージします。
    マージすると、以下のように「common.txt」ファイルで「マージコンフリクト」が発生します。


  6.common.txtの中身

    「マージコンフリクト」が発生した「common.txt」ファイルの中身を見ると、以下のように「コンフリクトマーカー」が挿入されています。


現在のファイルの差分を優先してマージする

  上記の例を利用して、現在のファイルの差分を優先してマージしてみます。
  上記の「4.」までは同じです。

  5.マージを行う

    コマンドのオプションは、以下のオプションを指定します。

ショートオプション ロングオプション オプションの値
-X --strategy-option= theirs

    「端末」から、以下のコマンドを実行します。
    コマンドの詳細は、「ファイルのマージを行うコマンドの説明」を参考にしてください。

    ポイントは、赤字の箇所です。

git merge --verbose --strategy=recursive --strategy-option=theirs fix


  6.コミットメッセージの入力

    「3ウェイマージ」によるマージが行われ、かつ、「マージコンフリクト」が発生した差分は、マージするブランチのファイルの差分を優先して適用します。

    従って自動的に「マージコンフリクト」が解消されるため、「マージコミット」が行われます。

    通常のコミットと同様に「コミットメッセージ」を入力します。


    「コミットメッセージ」を入力したら、ファイルを上書き保存してテキストエディターを終了します。

  7.コマンドの実行結果

    「3ウェイマージ」によるマージの結果が表示されます。


    「Recursiveマージストラテジー」でマージを行ったと表示されています。

  8.common.txtファイルの中身

    上記の例で「マージコンフリクト」が発生した「common.txt」ファイルの中身は、以下のようになっています。


  9.マージ後のブランチの確認

    マージ後のブランチを確認すると、以下のようになっています。


    「master」ブランチのブランチヘッドが指す「コミットオブジェクト」の識別子は、「マージコミット」で生成した「コミットオブジェクト」を指しています。

  10.マージ後のブランチの状態

    マージ後のブランチの状態を図にすると、以下のようになります。



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