Git チュートリアル - ブランチのマージ
このチュートリアルでは、ブランチをマージする方法と、競合が存在する場合の対処方法を学びます。
前回のチュートリアルで行ったのは、master
ブランチを台無しにしたくないいくつかの新機能で動作する新しいブランチを作成したことです。
これらの新しいブランチを作成し、新しい機能に満足したら、それを master
ブランチにマージする必要があります。そのため、次のリリースコードを公開するときに、新しい機能も含まれます。
早送り git merge
new_test_branch
ブランチの変更に満足し、それを master
にマージして戻すとしましょう。
-
master
ブランチをチェックしてください
$ git checkout master
-
ブランチを
マスター
にマージします
$ git merge new_test_branch
Updating 5fef94e..e7a7e81
Fast-forward
test3.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
この機能をブランチ new_test_branch
から取得し、この master
ブランチにマージしました。
マージ後のメッセージに表示される早送り
とは、ブランチで行ったコード変更まで git が早送りすることを意味します。master
ブランチに変更を加えました。
再帰的な git merge
この異なる git merge
をデモンストレーションする前に、2つのブランチ test_branch_A
と test_branch_B
を作成し、それらに異なる変更を加える必要があります。次に、test_branch_A
を master
ブランチにマージします。
ここで、test_branch_B
を master
にマージします。
$ git merge test_branch_B
Merge made by the 'recursive' strategy.
test1_rename.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
このマージと fast-forward
マージの違いは、このブランチコードには test_branch_A
機能がないため、マージは再帰的戦略によって行われることです。言い換えれば、ブランチ test_branch_B
が作成された後に master
ブランチが変更されています。
今、master
はこれらの 2つの機能の両方で最新であり、同時にそれらに取り組んだことは問題ではありません。。
競合を解決する
2つのテストブランチで変更したものに競合はありませんが、いくつかのブランチを master
にマージするときに競合が発生した場合はどうでしょうか
2つのブランチ test_branch_C
と test_branch_D
を作成し、ブランチ test_branch_C
のファイル test3.txt
にテキスト The should be C
を追加し、テキスト The letter should be D
をブランチ test_branch_D
のファイル test3.txt
に追加しましょう。
次に、test_branch_C
をマージして master
ブランチに戻します。
ここで、test_branch_D
を master
にマージします。
$ git merge test_branch_D
Auto-merging test3.txt
CONFLICT (content): Merge conflict in test3.txt
Automatic merge failed; fix conflicts and then commit the result.
ここでは、ファイル test3.txt
の競合を検出したため、正常にマージできなかったことがわかります。競合するファイルを編集して、競合を手動で解決する必要があります。
ファイル test3.txt
は競合を次のように示します
<<<<<<< HEAD
The letter should be C
=======
The letter should be D
>>>>>>> test_branch_D
HEAD
と =======
の間のテキストは、マージされるブランチ test_branch_C
から来る master
ブランチのテキストであり、マージされるブランチ test_branch_D
のテキストとは異なります。。
どのテキストを master
に保持するかを選択し、<<<<<
や >>>>>
などのすべてのシンボルを削除する必要があります。
たとえば、追加するテキストは文字は D である必要があります
とします。競合する領域を文字は D でなければなりません
に更新します。
競合を解決した後、git commit
を使用して、解決した競合をコミットできます。