如果一个分支有两个头怎么办?几个星期前我出现了这种情况,因为某些原因我当时没有将它们合并,只是继续在一个头上开发.现在我想摆脱另一个头.我该怎么办?我应该在这么多变更后合并它们吗?
Hel*_*lgi 31
所以你有这个:
o--o--o--A--B <- older unnecessary head
\
1--2--3--4--5--6 <- newer ‘good’ head
Run Code Online (Sandbox Code Playgroud)
......你不需要,A而且B绝对是100%肯定的.如果您不确定,并且可能有可挽救的东西,A并且B更好地合并头部以组合变化.正如Aaron所说,Mercurial很擅长.
现在您有两个选择:
B.如果变更A与B存在于其他版本库,你不要管,例如,如果其他人拉到A并B到他们的仓库,或者你推A及B到公共库(比如到位桶),那么你就已经发布A,并B到野外,并能摆脱它们.你应该做一个虚拟合并:
$ hg up 6
$ hg --config ui.merge=internal:local merge
Run Code Online (Sandbox Code Playgroud)
这将忽略合并时A和B合并时的任何更改.
如果,另一方面,A和B是私有,你可以剥夺他们:
$ hg strip A
Run Code Online (Sandbox Code Playgroud)
(Rev A和后代被剥离;使MQ扩展strip可用.)
或者,在没有更改集的情况下创建存储库的新克隆,A并且B:
$ hg clone myrepo myrepo2-clone -r 6
Run Code Online (Sandbox Code Playgroud)
(只有rev 6和祖先添加到克隆中.)
如果您提交了一些更改,则会创建一个头(将更改集添加到现有的更改集).如果对于相同的变更集多次发生这种情况,则会创建几个磁头.这没什么不寻常或不好的.
通常的解决方案是合并它们.Mercurial非常擅长合并.有可能结果仍然可以在没有任何手动工作的情况下编译和运行.
只要运行hg merge,然后hg status和hg diff看到两者之间发生了什么变化.如果您喜欢结果,请提交.如果你不喜欢它,update要么去清理你的工作区.
为了摆脱头脑,文档解释了如何做到这一点.
使用MQ,你也可以将第二个头转变为一个独立的分支(所以你可以保留它但不会打扰你).请参阅以下答案:如何在Mercurial中为非尖端修订创建分支?