如何中止mercurial中的合并?

Posted

技术标签:

【中文标题】如何中止mercurial中的合并?【英文标题】:How to abort a merge in mercurial? 【发布时间】:2011-04-28 05:15:27 【问题描述】:

我搞砸了一个合并。我想恢复然后再试一次。 有没有办法在提交之前恢复合并?

hg revert 不会做我想做的事,它只会还原文件的文本。 Mercurial 中止了我的第二次合并尝试,并抱怨原始合并仍未提交。

有没有办法在 hg merge 命令之后但在它提交之前撤消合并?

【问题讨论】:

How to abandon a hg merge?的可能重复 【参考方案1】:

今天有hg merge --abort。见hg help merge

【讨论】:

【参考方案2】:

在您执行hg merge 之后,但在hg commit 之前,您的工作副本有两个父级:第一个父级是您在合并之前更新到的变更集,第二个父级是您要合并的变更集。只要您的工作副本有两个父母,Mercurial 就不会让您再次执行hg merge

关于如何继续,您有两种选择:

    如果你想中止合并并回到你开始的地方,那么做

    hg update -C .
    

    这将更新工作副本以匹配第一个父项:. 始终表示工作副本的第一个父项。

    如果你想重新合并一些文件,那么就这样做

    hg resolve fileA fileB
    

    这将重新启动合并工具,就像您执行 hg merge 时一样。如果您在hg merge-time 发现您的合并工具配置错误,resolve 命令很好:修复配置并运行hg resolve --all。您可以根据需要多次运行hg resolve,直到您对合并感到满意为止。

【讨论】:

【参考方案3】:

hg update -C <one of the two merge changesets>

【讨论】:

简单、高效,我认为是最好的方法! :D @JonL。 - 是的,--clean-C 的同义词。我不确定. 将引用哪个变更集,但它始终是两个合并的变更集之一。 @Omnifarious,清理 . 应该清理到您在启动合并之前所做的任何修订。因此,如果您在 r42,尝试与 r43 合并,失败,清理,您将回到原始 r42。 hg update --clean 有效,因为 . 似乎是隐含的默认值 - 虽然它是 not explicitly documented。 @JoelPurra:. 在合并上下文中的含义相当模糊。

以上是关于如何中止mercurial中的合并?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Mercurial (v1.0.2) 中的合并冲突?

Mercurial 中止:索引 ... 已损坏

如何解决Mercurial(v1.0.2)中的合并冲突?

Mercurial推送,中止:授权失败

Mercurial/Meld 中的 3 路合并如何工作?

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