質問: この記事で下記の記述がありましたが > > 各ブランチが指すふたつのスナップショットとそれらの共通の先祖との間で三方向のマージを行いました。 > > > ここでよくわからないのは、なぜマージするために、「共通の祖先」が必要なのかです。 2つのブランチの最後のコミットをマージすれば済む話だと思っていましたが、「共通の祖先」はどこで必要ですか??不思議です。
回答: 例えば、 hoge.txt というファイルを2つのブランチでそれぞれ変更した結果、次のようになっているとします。 branchA での hoge.txt ``` A hoge B C ``` branchB での hoge.txt ``` A B piyo C ``` この二つをマージしてみてください。できますか? 次のようなマージ結果が考えられますが、どれを選べばいいのでしょうか。 * 「元々なかった `hoge` と `piyo` をそれぞれ追加した」 両方含むのが正しい * 「`hoge` と `piyo` をそれぞれ削除した」 どちらも含まないのが正しい * 「実は branchA は何も変更していない」 branchB が正しい * 「実は branchB は何も変更していない」 branchA が正しい * 「そもそも `B` すらなかった」 両方で追加された `B` はどうすれば? * etc... これを判断するには、「**共通の祖先**に対して、それぞれがどう変更したのか」という情報が必要です。