2012-01-17 77 views
5

進行合併時有沒有頭可以選擇?在合併之前哪個頭位置?

我的意思是這樣的:我已經說了舊的rev 1000.與此同時,我做了234次提交,並且我的轉速爲1234年。現在我需要回到1000年來爲客戶實現bug修復。我犯了錯誤修正,給客戶發佈,並且提交1235.

這只是一個微小的改變:隻影響一個文件。

在這一點上我有兩個頭:1235(其母公司爲1000)和1234他們的共同(盛大隆重-...-父)是1000

如果我發出hg merge後跟hg status,我收到了一個巨大的變化列表。但是,如果我先做hg update -C 1234,然後hg mergehg status,那麼我只能看到我的獨特變化(除非我誤認爲剛剛發生了什麼)。

基本上,這樣做:

hg update -C 1234 
hg merge # (merging 1234 and 1235, my two only heads) 
hg status 

提供了比這不同的狀態:

hg update -C 1235 
hg merge # (merging 1234 and 1235, my two only heads) 
hg status 

所以基本上,我問合併兩個相同的磁頭後的狀態(hg status),但hg status的輸出似乎取決於我目前的頭部。

這是正常的行爲,如果是的話,是否有一個頭比另一頭「偏好」?

這兩個操作的結果是在同一個存儲庫/源代碼狀態嗎?

回答

5

是的,它們都導致相同的最終狀態。 Mercurial中的合併幾乎是100%對稱的。唯一的非對稱部分是命名分支

hg update branch-a 
hg merge branch-b 
hg commit 

將在branch-a創建變更。首先更新到branch-b將在branch-b上創建它。儘管如此,您可以在提交之前通過發佈hg branch來更改合併提交的分支,因此默認分支名稱更像是一個建議。

然而,在你的情況下,我肯定會更新回修訂版1234,然後將修補程序合併到此版本中。他們的方式我想這是你有一個主要的開發線 - 這是你在爲下一個版本開發新功能的地方。

當您對舊版本進行錯誤更新時,請更新回來,進行錯誤修復,然後爲您的客戶製作錯誤修復版本。然後,您爲bug修復創建了另一個(微小)分支。合併之前要更新到何處的問題是:

  • 我想繼續沿着bugfix分支嗎?如果是這樣,那麼留在bugfix並將主分支合併到它。

  • 我想繼續沿主分支嗎?如果是,則更新回主分支並將bugfix分支合併到其中。

在這種情況下,只更新回主分支 - 您希望將bug修復與新功能一起使用,並且您希望添加更多功能。

想想我上面提到的命名分支 - 那裏你會做

hg update 1.x 
# fix bug 
hg commit 
hg tag 1.3 

回去1.x的系列軟件的,修正錯誤,並進行了1.3修正版。完成後,您想要與default分支合併。由於分支名稱是從合併的第一父繼承,這是最順利更新第一默認:

hg update default 
hg merge 1.x 
hg commit 

這就是recommended way做的水銀。

+0

+1,非常感謝。我確實回到了開發的主線,並將bug修復合併到了那裏。但是我感到非常驚訝:*「hg status」*(我在做提交之前總是運行* hg sta *)讓我感到困惑......所以我有點「推斷」它可能更好地更新到主線,從那裏合併。但是,我仍然想確定我沒有看到任何東西。不知何故,我始終確信,合併總是100%相同。我不知道我從哪裏得到這個信息:它對我來說似乎是合乎邏輯的......但是我錯了:)感謝您的鏈接,時間閱讀! – NoozNooz42 2012-01-17 22:08:58