2011-04-01 78 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