我遇到了工作上的困难(如下面的简化草图所示)。在创建分支期间,由于某种原因,默认值被作为分支的父级卡住,但仍然单独保留默认分支(这是我们正在使用的默认分支)。这给我们留下了两个默认分支。
有人误解了如何在分支之前提交更改,因此我们最终将branch1中所做的更改合并到branch2中。
我一直在调查Mercurial: the definitive guide以查看这是否是一个可解决的问题,但无法找出有关退出或关闭的命令会有所帮助。最简单的方法是,如果以某种方式可以重命名剩余的默认分支。
解决此问题的最佳和/或最简单方法是什么?
我正在准备将开发分支合并到正确的默认分支中,并希望在开始任何重大合并之前解决这个问题,这可能会使将来更难以解决这个问题。
答案 0 :(得分:11)
请记住,分支名称只是提交的标签 - 没有什么真正打破你的图表。合并名称不会影响合并时发生的情况,合并时只有文件内容很重要。
话虽这么说,你可以关闭default
上的额外头部,branch1
下面的那个:
$ hg update "min(heads(branch(default)))"
$ hg commit --close-branch -m "closing this head"
这会在你的图表中留下一个悬空的近变化集,这很好。关闭变更集会隐藏hg heads
的头部,而hg merge
等命令将不再建议与此头部合并。
答案 1 :(得分:3)
老问题,但我可能对某人有用。
..这种情况发生在单个分支发散时,通常是有人进行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
时得到的,但我真的不喜欢垃圾在历史上承诺。