我刚刚将分支A合并到B中,由于某种原因合并不顺利。我希望将B恢复到合并之前的状态,然后重新尝试,就像之前从未发生过一样。我在考虑做什么
hg clone myrepo newrepo -r A -r 12345
其中12345是B合并提交错误之前的修订号
我认为这有效,但我有很多其他分支(大多数分支都使用commit --close-branch关闭),这会使这些分支回到非活动状态。
有没有办法克隆除修订版123456之外的所有内容? (其中123456是B上的错误提交)
答案 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命令。