11

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

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

我一直在研究Mercurial:权威指南,看看这是否是一个可解决的问题,但找不到有关退出或关闭的哪些命令会有所帮助。最简单的方法是如果有可能以某种方式重命名剩余的默认分支。

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

我正在准备将开发分支合并到正确的默认分支中,并希望在我开始任何重大合并之前解决这个令人头疼的问题,这可能会使将来修复这个问题变得更加困难。

分支问题

4

2 回答 2

11

请记住,分支名称只是提交上的标签——您的图表并没有真正损坏。分支名称不会影响合并时发生的情况,只有文件内容在合并时很重要。

话虽如此,您可以关闭额外的头default,下面的一个branch1

$ hg update "min(heads(branch(default)))"
$ hg commit --close-branch -m "closing this head"

这将在您的图表中留下一个悬空的关闭变更集,这很好。关闭的变更集将隐藏头部,hg heads并且hg merge不再建议与此头部合并的命令。

于 2012-08-22T13:43:29.060 回答
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,但我真的不喜欢在历史上出现垃圾提交。

于 2013-07-23T03:45:14.817 回答