3-way マージ
CoddyのTerminalジャーニー「バージョン管理」セクションの一部 — レッスン 36/58。
両方のブランチが独立して進んでいる場合、Gitは単にファストフォワード(早送り)することはできません。その代わりに、3方向マージ(three-way merge)を実行します。共通の祖先と2つのブランチの先端を確認し、それらを結合した新しいコミットを作成します。
この新しいコミットはマージコミットです。これには、それぞれのブランチから1つずつ、計2つの親があります:
git switch main
git merge feature -m "Merge feature"-m フラグはマージコミットメッセージを直接指定するため、Git はエディタを開きません。
ほとんどの場合、Gitは、ファイルの異なる部分に手が加えられている限り、両方のブランチからの変更を自動的に統合できます。コンフリクト(衝突)は、両方のブランチが同じ行を変更した場合にのみ発生します。これは次のレッスンのトピックです。
チャレンジ
中級top.txt (内容: a) と bottom.txt (内容: b) が含まれている新しいフォルダから開始します。
リポジトリを初期化し、最初のコミットを作成してから、以下の操作を行ってください:
featureブランチを作成し、top.txtにaddedという行を追記してコミットします。mainブランチに切り替え、bottom.txtにaddedという行を追記してコミットします。Merge featureというメッセージでfeatureをmainにマージします。
git rev-list --count HEAD を使用して、HEAD から到達可能なコミット数を出力してください。期待されるカウントは 4 (initial + feature + main + merge) です。
チートシート
両方のブランチが分岐している場合、Gitは3方向マージ (three-way merge)を実行し、2つの親を持つ新しいマージコミットを作成します:
git switch main
git merge feature -m "Merge feature"-mフラグは、エディタを開かずにマージコミットメッセージを設定します。両方のブランチが異なる行を変更している限り、Gitは自動的にマージを行います。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。