2011-04-27 48 views
12

當我第一次開始使用hg時,更新似乎具有一種幾乎不可思議的能力來採取新拉動的變化並將它們整合到我的本地回購中。然而,最近我注意到,即使我的本地修改與其他地方的新修改沒有衝突,我也總是需要合併,導致出現一個額外的修改集,這些修改集重複了我已經在我的一個修改中進行的一系列修改本地代碼行(頭)。Mercurial:爲什麼我有時需要合併後而不是簡單地更新?

我想了解它是什麼引起hg需要合併,而不是隻是smooshing與更新一起的所有更改。衝突顯然需要合併。還有什麼?

回答

20

合併與更新的需要不是關於更改是否衝突,而是關於您是否在提交歷史記錄中有分割。如果您有這樣的歷史記錄:

[A]--[B]--[C]--UNCOMMITTEDCHANGESHERE 

並且您拉下來 - [D]當您更新時,您未取消的更改將與D結合使用。

但如果你犯,讓你有:

[A]--[B]--[C]--[E] 

,你拉你必須:

[A]--[B]--[C]--[E] 
      \ 
       -[D] 

,你就需要合併獲得到一個單一的頭。

爲了記錄,這是一個更好的主意。使用未提交的更改進行更新是一種不可逆轉的操作,總是有點可怕。如果您承諾,您可以隨時撤消/重做合併,直到您對組合感到滿意爲止。

P.S.有人可能會建議fetch擴展名,他們是錯誤的。

+0

因此,在相關說明 - 如果我rebase而不是合併,是否保持一個連續的codeline?我注意到,如果希望能夠推回到SVN,那麼hgsubversion就需要這個,根據這些信息,這更有意義。 – 2011-04-27 18:45:37

+2

重新產生確實產生了線性歷史,但它是一個稍微不誠實的線性歷史(因爲開發不是線性的;它是併發的)。有些人喜歡這樣,但我寧願我的歷史真實準確地反映事情發生的順序。這完全取決於個人偏好(或團隊政策)。 – 2011-04-28 02:54:00

+0

出於好奇,爲什麼要抓錯'?我知道它已被棄用,但不是爲什麼 – 2013-01-17 11:17:26

相關問題