Version Control with Git ch9 Merges (2/3)
Merges(続き)
Merge Strategies
- criss-cross mergeで必要となる概念
- merge-baseをうまく決められない
- どこをmerge-baseにとっても、変更が重複してコンフリクトしてしまう
Degenerate Merges
- 同じコミットをdegenerate(縮退)させる
- already up-to-date
- targetにother_branchのコミットがすでに全てある
- fast-forward
- targetがまるまるother_branchに含まれている
- リモート追跡ブランチをmergeするときによくある
- already up-to-date
- いずれも、実コミットを積まないのが重要
- さもないと永久にstableな状態にならない
Normal Merges
- 実コミットを積む
Resolve
- 2ブランチのコミットで行う直感的なやつ
Recursive merges
- merge baseが一意に定まらない場合に
Octopus merges
- 同時に3つ以上のブランチをマージするやつ
- コンフリクト解消はできない
- 一般化・設計上の美しさに由来
- 親なし (initial commit)
- 親1つ (normal commit)
- 親複数 (merge commit)
- 2つに制限する道理はない
- コミットグラフが美しい
Specialty Merges
Ours
- other_branchsをマージしたという歴史のみ刻む
- ファイルはHEADのまま
Subtree
英語
- eponymous
- 名祖の
- tack on
- 上乗せする