2011-04-01 80 views
3

我正在学习Git,我发现this site上的教程非常有用。在该页面中,有关合并,它包括:为什么合并需要你考虑共同的祖先?

  +---------- (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之间可能会有一些提交,并且发生了更改。

+0

Git使用的变更就像善变的,所以一个节点仅包含的差异其父。 – sleeplessnerd 2011-04-01 12:11:29

+2

@sleeplessnerd实际上,Git存储完整的文件,而不是差异。除非你的意思是别的吗? – Jonathan 2011-04-01 12:16:14

+1

查看[这个问题](http://stackoverflow.com/q/4129049/11343)3路合并的优势 – CharlesB 2011-04-01 12:28:23

回答

2

这仅仅是因为合并的作品更好,如果你知道这个共同的祖先。见this answer,它有很好的解释。

4

(我毫不犹豫地问,如果这是一个愚人节的,我不想侮辱任何人...)

也许你不理解,这是混帐做合并您?

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

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

回答:不,你不能

但是,如果你知道乙看了这样的:

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

它成为一个没有脑子,和混帐可以处理这在它自己的

说不上如果回答您的问题...

+0

为什么D会有与B完全相同的数据?这没有意义... – Ben 2016-09-13 23:37:03