Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 为什么合并需要你考虑共同祖先?_Git_Diff_Three Way Merge - Fatal编程技术网

Git 为什么合并需要你考虑共同祖先?

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向合并功能,这仅仅是因为如果您知道共同的祖先,合并工作会更好。看

我正在学习Git,我发现关于Git的教程非常有用。关于合并,该页包括:

合并提交为(F),具有 父母(D)和(E)。因为(B)是 (D)和(D)之间的共同祖先 (E) ,则(F)中的文件应包含 (B)和(D)之间的变化, 即标题修正,合并 从(E)进入文件


我不明白为什么你会担心共同祖先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");
}