Mercurial摆脱糟糕的合并

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mercurial摆脱糟糕的合并相关的知识,希望对你有一定的参考价值。

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

hg clone myrepo newrepo -r A -r 12345

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

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

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

答案

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

来自wiki

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

另一答案

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

另一答案

我希望我能正确理解你的情况。如果我是你应该能够在合并之前更新到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'
另一答案

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

以上是关于Mercurial摆脱糟糕的合并的主要内容,如果未能解决你的问题,请参考以下文章

使用mercurial生成合并日志

如何中止mercurial中的合并?

Mercurial 无法通过命令行合并

如何在 Mercurial 中重复合并分支

章鱼合并是否可能在mercurial中

Mercurial:在一个仓库中的分支之间合并一个文件