Mercurial:如何处理一个有两个头的分支

时间:2011-08-03 14:04:07

标签: mercurial branch

如果一个分支有两个头怎么办?几个星期前我出现了这种情况,因为某些原因我当时没有将它们合并,只是继续在一个头上开发。现在我想摆脱另一个头。我该怎么办?我应该在这么多变更集后合并它们吗?

3 个答案:

答案 0 :(得分:30)

所以你有这个:

o--o--o--A--B  <- older unnecessary head
       \
        1--2--3--4--5--6  <- newer ‘good’ head

...您不需要AB,绝对是100%肯定的。 如果您不确定,并且AB中可能存在可挽救的内容,请更好地合并头部以组合更改。正如Aaron所说,Mercurial擅长它。

现在您有两个选择:

  • 摆脱旧头,或
  • 做两个忽略头B的头的虚拟合并。

如果更改集AB出现在您无法控制的其他存储库中,例如如果其他人将AB放入他们的存储库,或者您将AB推送到公共存储库(比如Bitbucket),那么您已经发布了{{ 1}}和A进入野外,无法摆脱它们。你应该做dummy merge

B

这将忽略合并时$ hg up 6 $ hg --config ui.merge=internal:local merge A的所有更改。

另一方面,如果BA是私有的,您可以strip

B

(Rev $ hg strip A 和后代被剥离;启用MQ扩展以使A可用。)

或者,在没有更改集stripA的情况下,对您的存储库进行新的克隆:

B

(只有rev $ hg clone myrepo myrepo2-clone -r 6 和祖先添加到克隆中。)

答案 1 :(得分:9)

如果您提交了一些更改,则会创建一个头(将更改集添加到现有的更改集)。如果对于相同的变更集多次发生这种情况,则会创建几个磁头。这没什么不寻常或不好的。

通常的解决方案是合并它们。 Mercurial非常擅长合并。有可能结果仍然可以在没有任何手动工作的情况下编译和运行。

只需运行hg merge,然后hg statushg diff即可查看两者之间的变化。如果您喜欢结果,请提交。如果您不喜欢它,请update前往清理您的工作区。

摆脱头部,docs explain how to do that

使用MQ,你也可以将第二个头转变为一个独立的分支(所以你可以保留它但不会打扰你)。请参阅此答案:How can I create a branch for a non-tip revision in Mercurial?

答案 2 :(得分:-3)

如果您需要在旧分支上保留更改,则应合并它们,这应该不是问题。