3

我正在学习 Git,并且发现此站点上的教程非常有用。在该页面上,关于合并,它包括:

         +---------- (D) ---------------+
        /             |                  \
(A) -- (B) -- (C) -------------- (E) -- (F)
                      |                  |
                 fix-headers           master
                                         |
                                        HEAD

合并提交是 (F),有父 (D) 和 (E)。因为 (B) 是 (D) 和 (E) 之间的共同祖先,所以 (F) 中的文件应该包含 (B) 和 (D) 之间的更改,即标题修复,并合并到 (E) 的文件中。

我不明白你为什么会担心共同的祖先B。为什么你不能把D和E合并成F?D 将从 B 派生,但可能包含您想要的差异。B 和 D 之间可能已经进行了多次提交,并进行了更改和删除。

4

3 回答 3

4

(我犹豫问这是不是愚人节,我不想侮辱任何人......)

也许你不明白这是 git你做的合并?

问题:这是D和E,你能告诉我F应该是什么样子吗?

D                                        E
using System;                            using System;
public void main()                       public void main()
{                                        {
     Console.WriteLine("hello world");        Console.WriteLine("Hello world!");
}                                        }

回答:不,你不能

但是,如果您知道 B 看起来像这样:

B
using System;
public void main()
{
     Console.WriteLine("hello world");
}

它变得不费吹灰之力,git 可以自行处理

不知道这是否回答了你的问题......

于 2011-04-01T13:16:34.297 回答
2

这仅仅是因为如果您知道共同的祖先,合并会更好。看到这个答案,它有很好的解释为什么。

于 2011-04-01T12:30:41.097 回答
1

Wikipedia对 3-way merge有很好的介绍

于 2011-04-01T12:15:25.530 回答