

[この記事](https://git-
scm.com/book/ja/v1/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%AE%E5%9F%BA%E6%9C%AC)で下記の記述がありましたが

> 各ブランチが指すふたつのスナップショットとそれらの共通の先祖との間で三方向のマージを行いました。

ここでよくわからないのは、なぜマージするために、「共通の祖先」が必要なのかです。  
２つのブランチの最後のコミットをマージすれば済む話だと思っていましたが、「共通の祖先」はどこで必要ですか？？不思議です。


CC BY-SA 3.0
2015-06-04T05:13:37.180
10968
2015-06-05T07:41:41.263
2015-06-04T13:21:47.040
5288
9989
question
git
Git のマージで「共通の祖先」は何故必要ですか？


例えば、 hoge.txt というファイルを2つのブランチでそれぞれ変更した結果、次のようになっているとします。

branchA での hoge.txt

[code]

    A
    hoge
    B
    C
    
[/code]

branchB での hoge.txt

[code]

    A
    B
    piyo
    C
    
[/code]

この二つをマージしてみてください。できますか？

次のようなマージ結果が考えられますが、どれを選べばいいのでしょうか。

  * 「元々なかった `hoge` と `piyo` をそれぞれ追加した」 両方含むのが正しい
  * 「`hoge` と `piyo` をそれぞれ削除した」 どちらも含まないのが正しい
  * 「実は branchA は何も変更していない」 branchB が正しい
  * 「実は branchB は何も変更していない」 branchA が正しい
  * 「そもそも `B` すらなかった」 両方で追加された `B` はどうすれば？
  * etc...

これを判断するには、「 **共通の祖先** に対して、それぞれがどう変更したのか」という情報が必要です。


CC BY-SA 3.0
2015-06-04T07:00:54.590
10973
2015-06-05T07:41:41.263
2015-06-05T07:41:41.263
8000
8000
10968
answer