Mercurial摆脱糟糕的合并

问题描述 投票:5回答:4

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

hg clone myrepo newrepo -r A -r 12345

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

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

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

mercurial
4个回答
10
投票

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

来自wiki

hg strip rev从存储库中删除了rev修订版及其所有后代。要删除不需要的分支,您可以指定特定于该分支的第一个修订。默认情况下,hg strip将在.hg/strip-backup/目录中放置备份。如果条带被证明是个坏主意,你可以用hg unbundle .hg/strip-backup/filename.恢复


2
投票

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


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'

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.