在断开分支提交后,在Mercurial中存在两个默认分支

时间:2012-08-22 12:51:12

标签: mercurial branching-and-merging

我遇到了工作上的困难(如下面的简化草图所示)。在创建分支期间,由于某种原因,默认值被作为分支的父级卡住,但仍然单独保留默认分支(这是我们正在使用的默认分支)。这给我们留下了两个默认分支。

有人误解了如何在分支之前提交更改,因此我们最终将branch1中所做的更改合并到branch2中。

我一直在调查Mercurial: the definitive guide以查看这是否是一个可解决的问题,但无法找出有关退出或关闭的命令会有所帮助。最简单的方法是,如果以某种方式可以重命名剩余的默认分支。

解决此问题的最佳和/或最简单方法是什么?

我正在准备将开发分支合并到正确的默认分支中,并希望在开始任何重大合并之前解决这个问题,这可能会使将来更难以解决这个问题。

branch problems

2 个答案:

答案 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时得到的,但我真的不喜欢垃圾在历史上承诺。