老問題,但我雖然這可能是有用的人。
..此問題發生在單個分支發散時,通常在有人執行hg push -f
而不是拉取和更新時發生。在你的情況下,被迫頭部碰巧也在另一個分支上,但這也可能發生在單個分支上。我的解決方案是讓它坐落在分支合併之前 - 至少,如果有計劃在某個時候合併它們。在我看來,這個解決方案比關閉錯誤的頭更加乾淨。
但是,在做hg update default
會帶你到最新的提交與'默認'的名稱。儘管我認爲這個想法在你的案例中是正確的,但這是因爲你實際需要的「默認」是最新的「默認」分支名稱的提交,所以應該沒有問題。但是,如果錯誤的頭部更新,hg update default
會將人們帶到錯誤的頭部,這可能相當混亂。
無論是哪種情況,這樣就解決了問題:
hg update <revision number of correct 'default' head>
hg merge <branch the erroneous 'default' head is on>
因此,在這種情況下,hg update default
將更新到錯誤的頭:
1-2(default)
\
3(default)-4(branch1)
你需要做的:
hg update 2
hg merge branch1
# results in this graph:
# 1-2---5(default)
# \ /
# 3-4(branch1)
而在下面,hg update default
將更新爲您所採取的行爲無論如何想要反正:
1-2------------5(default)
\
3(default)-4(branch1)
..你可以忽略錯誤的默認值,因爲它不會影響任何人。然後,一旦某人做了一個hg update default; hg merge branch1
,錯誤的頭會默默地消失,因爲那時它是錯誤的「默認」的祖先。 ..這會導致這樣的事情:
1-2-5----------11(default)
\ /
3-4-[...]-10(branch1)
..你也做一個無用的承諾在您需要的默認值,那麼這將是最新的,這將是當他們這樣做的一個人先hg update default
,但我真的不喜歡有歷史上的垃圾提交。
我認爲它已經排序。你有'hg rebase'和/或'hg strip'的經驗嗎?最好將branch1和branch2作爲一個分支。 branch2基本上是在branch1中進行的更改,但沒有包含缺省分支。 – Patrick
在閱讀rebase和strip之後,我現在看到它們通常只用於未提交或與存儲庫共享的提交。 – Patrick
@帕特里克:你對rebase和strip的看法是正確的:如果你已經把變更集推到了別的地方,那麼這兩個命令都是低效的。什麼都不會中斷,但是當你從服務器上取下時,你會發現你獲得了原始的變更集。這或者否定命令的效果(對於'hg strip')或者看起來很亂(對於'hg rebase')。 –