如果一个分支有两个头怎么办?几个星期前我出现了这种情况,因为某些原因我当时没有将它们合并,只是继续在一个头上开发。现在我想摆脱另一个头。我该怎么办?我应该在这么多变更集后合并它们吗?
答案 0 :(得分:30)
所以你有这个:
o--o--o--A--B <- older unnecessary head
\
1--2--3--4--5--6 <- newer ‘good’ head
...您不需要A
和B
,绝对是100%肯定的。 如果您不确定,并且A
和B
中可能存在可挽救的内容,请更好地合并头部以组合更改。正如Aaron所说,Mercurial擅长它。
现在您有两个选择:
B
的头的虚拟合并。如果更改集A
和B
出现在您无法控制的其他存储库中,例如如果其他人将A
和B
放入他们的存储库,或者您将A
和B
推送到公共存储库(比如Bitbucket),那么您已经发布了{{ 1}}和A
进入野外,无法摆脱它们。你应该做dummy merge:
B
这将忽略合并时$ hg up 6
$ hg --config ui.merge=internal:local merge
和A
的所有更改。
另一方面,如果B
和A
是私有的,您可以strip:
B
(Rev $ hg strip A
和后代被剥离;启用MQ扩展以使A
可用。)
或者,在没有更改集strip
和A
的情况下,对您的存储库进行新的克隆:
B
(只有rev $ hg clone myrepo myrepo2-clone -r 6
和祖先添加到克隆中。)
答案 1 :(得分:9)
如果您提交了一些更改,则会创建一个头(将更改集添加到现有的更改集)。如果对于相同的变更集多次发生这种情况,则会创建几个磁头。这没什么不寻常或不好的。
通常的解决方案是合并它们。 Mercurial非常擅长合并。有可能结果仍然可以在没有任何手动工作的情况下编译和运行。
只需运行hg merge
,然后hg status
和hg diff
即可查看两者之间的变化。如果您喜欢结果,请提交。如果您不喜欢它,请update
前往清理您的工作区。
摆脱头部,docs explain how to do that。
使用MQ,你也可以将第二个头转变为一个独立的分支(所以你可以保留它但不会打扰你)。请参阅此答案:How can I create a branch for a non-tip revision in Mercurial?
答案 2 :(得分:-3)
如果您需要在旧分支上保留更改,则应合并它们,这应该不是问题。