Mercurial摆脱糟糕的合并

时间:2011-04-29 14:50:13

标签: mercurial

我刚刚将分支A合并到B中,由于某种原因合并不顺利。我希望将B恢复到合并之前的状态,然后重新尝试,就像之前从未发生过一样。我在考虑做什么

hg clone myrepo newrepo -r A -r 12345

其中12345是B合并提交错误之前的修订号

我认为这有效,但我有很多其他分支(大多数分支都使用commit --close-branch关闭),这会使这些分支回到非活动状态。

有没有办法克隆除修订版123456之外的所有内容? (其中123456是B上的错误提交)

4 个答案:

答案 0 :(得分:10)

假设您尚未将合并变更集推送到任何公共位置,最简单的解决方案是使用Mercurial Queues附带的hg strip命令(即mq)扩展名。

来自wiki

  

hg strip rev删除了rev修订版   以及它的所有后代   库。删除不需要的   分支,你会指定第一个   特定于该分支的修订版。通过   默认情况下,hg strip会进行备份   在.hg/strip-backup/目录中。如果   你觉得脱衣舞是一个坏主意   可以用hg unbundle恢复   .hg/strip-backup/filename.

答案 1 :(得分:2)

它可能不如hg rollback那么好,但通常我做的是更新到头A,在前一个头B中合并,检查我这次是否正确,然后dummy-merge远离坏合并

答案 2 :(得分:1)

我希望我能正确理解你的情况。如果我是你应该能够在合并之前更新到B的修订版,给该修订版本一个新的分支名称,将A合并到其中,然后继续。您可能希望将原始B分支标记为已关闭。

$ hg up 12345  #12345 is the revision of B prior to the merge
$ hg branch B-take2
$ hg merge A
$ hg commit -m 'merge A in to B-take2'

$ hg up B
$ hg commit --close-branch -m 'mark original B branch as closed'

答案 3 :(得分:1)

使用hg rollback命令是否为时已晚?如果是,请尝试hg backout命令。