投稿

[GitHub 100日チャレンジ] Day 47 - 3-Way Merge

3-Way Mergeの仕組み、共通祖先、mainとfeatureの両方が進んだ場合のマージコミットを説明します。

[GitHub 100日チャレンジ] Day 47 - 3-Way Merge

3-Way Mergeとは

3-Way Mergeは、取り込み先と作業ブランチの両方に別々の変更があるときに使われるマージです。Gitは共通祖先、現在のブランチ、取り込むブランチの三つを見比べます。

イメージ

1
2
main:    A---B---C
feature:     \---D---E

この状態でmergeすると、変更を統合するためのマージコミットが作られることがあります。

実行例

この例では、同じコミットから分岐したmainとfeature/loginに、それぞれ異なる変更をコミットしておきます。競合を避けて仕組みだけ観察するなら別々のファイルを変更します。feature/loginは以下のコマンドで新規作成される名前ではありません。

1
2
git switch main
git merge feature/login

特徴

  • 複数の作業線を統合できる
  • マージコミットで統合点が残る
  • チーム開発ではよく起きる

今日のゴール

マージが完了したらlogのグラフで二本の履歴が合流する地点を探し、そのコミットの親を確認します。競合が出た場合は完了を急がず、次のDay 48の解決手順へ進みましょう。

Fast-Forwardできない場合に、Gitが共通祖先を使って変更を統合することを理解しましょう。

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。