Git 为什么合并需要你考虑共同祖先?
我正在学习Git,我发现关于Git的教程非常有用。关于合并,该页包括: 合并提交为(F),具有 父母(D)和(E)。因为(B)是 (D)和(D)之间的共同祖先 (E) ,则(F)中的文件应包含 (B)和(D)之间的变化, 即标题修正,合并 从(E)进入文件Git 为什么合并需要你考虑共同祖先?,git,diff,three-way-merge,Git,Diff,Three Way Merge,我正在学习Git,我发现关于Git的教程非常有用。关于合并,该页包括: 合并提交为(F),具有 父母(D)和(E)。因为(B)是 (D)和(D)之间的共同祖先 (E) ,则(F)中的文件应包含 (B)和(D)之间的变化, 即标题修正,合并 从(E)进入文件 我不明白为什么你会担心共同祖先B。为什么你不能合并D和E来产生F?D将从B派生,但可能包含您想要的差异。在B和D之间可能有许多提交,并进行了更改和删除。Wikipedia有一个3向合并功能,这仅仅是因为如果您知道共同的祖先,合并工作会更好。看
我不明白为什么你会担心共同祖先B。为什么你不能合并D和E来产生F?D将从B派生,但可能包含您想要的差异。在B和D之间可能有许多提交,并进行了更改和删除。Wikipedia有一个3向合并功能,这仅仅是因为如果您知道共同的祖先,合并工作会更好。看,这很好地解释了原因。(我不想问这是不是愚人节,我不想侮辱任何人…) 也许你不明白这是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可以自己处理这个问题
不知道这是否回答了您的问题…git使用的变更集与mercurial一样,因此节点只包含与其父节点的差异。@Sleeplessner实际上,git存储的是完整的文件,而不是差异。除非你说的是别的意思?看看3路合并的好处吧,你错了。git中的每个提交都指向整个项目的完整快照。如果某个文件不同,则会存储新版本的单独快照,而不仅仅是差异。Mercurial OTOH使用增量存储。
B
using System;
public void main()
{
Console.WriteLine("hello world");
}