マージコンフリクトとマージコンフリクトの対応例
「マージコンフリクト」と「マージコンフリクト」の対応例です。「3ウェイマージ」によるマージでは、「マージコンフリクト」が発生する可能性があります。
「Git」が「3ウェイマージ」を行う際、ファイルの差分からファイルの内容をマージします。
この時、ファイルの同一行が異なる場合など、「Git」がユーザーの期待するマージ結果を判断できないケースがあります。
このような状況を「マージコンフリクト」を言います。
「マージコンフリクト」が発生すると「マージコミット」は行われません。
ユーザーは、「マージコンフリクト」が発生しているファイルを手動で編集し、コミットを行う必要があります。
1.マージ前の状態
ここでは例として、「master」ブランチと「fix」ブランチをマージします。1-1.ブランチの状態
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「master」ブランチであることが分かります。
同様に、「HEAD」は「master」ブランチを指していることが分かります。
1-2.ブランチの状態
ブランチの状態を図にすると、以下のようになります。見ての通り、この状態で「master」ブランチに「fix」ブランチをマージすると、「3ウェイマージ」によるマージになることが分かります。
1-3.masterブランチのワーキングディレクトリー
「master」ブランチのワーキングディレクトリーは、以下のようになっています。ここでは例として、「master.txt」ファイルに着目します。
「master.txt」ファイルの中身は、以下のようになっています。
1-4.fixブランチのワーキングディレクトリー
「fix」ブランチのワーキングディレクトリーは、以下のようになっています。ここでも同様に、「master.txt」ファイルに着目します。
「master.txt」ファイルの中身は、以下のようになっています。
「1-3.」の「master.txt」ファイルの中身と比較すると、1行目が異なっています。
このようなケースでは、「マージコンフリクト」が発生します。
「master」ブランチの「master.txt」ファイルの1行目の内容と、「fix」ブランチの「master.txt」ファイルの1行目の内容が異なっており、どちらの内容を採用すればいいのか、「Git」は判断できません。
2.マージを行う
「master」ブランチと「fix」ブランチをマージします。2-1.コマンドの実行
「端末」から、以下のコマンドを実行します。コマンドの詳細は、「ファイルのマージを行うコマンドの説明」を参考にしてください。
git merge --verbose fix
2-2.マージコンフリクトの発生
マージを行うと、以下のように「マージコンフリクト」のメッセージが表示されます。また、「マージコンフリクト」が発生したファイルが表示されます。
2-3.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を確認すると、以下のようになります。「master.txt」ファイルで「マージコンフリクト」が発生していると表示されます。
3.マージコンフリクトが発生したファイルの修正
「マージコンフリクト」が発生したファイルを修正します。3-1.ファイルを開く
「マージコンフリクト」が発生したファイルを開きます。以下のように、コンフリクトが発生している箇所に、「コンフリクトマーカー」が挿入されます。
この内容を元に、コンフリクトが発生している行を修正します。
3-2.ファイルの修正
ファイルの修正を行います。ユーザーは、自由に修正することができます。
ここでは例として、以下のように修正しました。
3-3.ステージングエリアに追加
修正したファイルを「ステージングエリア」に追加します。3-4.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を確認すると、以下のようになります。「マージコンフリクト」が発生したファイルが存在していないことが分かります。
3-5.コミットを行う
「マージコンフリクト」が発生したファイルを全て「ステージングエリア」に追加したら、コミットを行います。以上で「マージコンフリクト」の対応は完了です。
3-6.ブランチの状態
ブランチ構成を確認すると、以下のようになっています。「master」ブランチのブランチヘッドが指す「コミットオブジェクト」の識別子は、「3-5.」で生成した「コミットオブジェクト」を指しています。