老问题,但我虽然这可能对某人有用。
..这发生在单个分支发散时,通常是当有人执行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
,但我真的不喜欢在历史上出现垃圾提交。