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

37

我遇到了合并冲突问题,使用的是 Mercurial 1.0.2 版本:

merging test.h
warning: conflicts during merge.
merging test.h failed!
6 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
  hg update -C 19
  hg merge 18

我无法理解如何解决这个问题。谷歌搜索结果指示使用:

hg resolve

但由于某种原因,我的Mercurial(v1.0.2)没有resolve命令:

hg: unknown command 'resolve'

我该如何解决这个冲突?


我认为您需要将另一个答案标记为正确答案。 - Lipis
3个回答

80

如何在评论中突出显示Hg 1.1+的答案:

对于Hg 1.1+,手动修复文件,然后执行以下操作:

hg resolve -m test.h

标记该文件已合并。


同样的问题。那么.orig文件该怎么处理? - Imran Raheem
1
这里有一个不错的快速方法来完成这个任务:hg st -un | grep orig | xargs rm - Dori
2
Dori,我会在那个grep的结尾加上一个$,这样你不会意外地捕捉到你不想要的东西。 - Collin Klopfenstein

14

仅适用于hg < v1.1

不需要调用任何hg命令。与svn不同,Mercurial不会跟踪有冲突的文件。如果调用hg status,您将看到该文件仅被标记为已修改。

只需手动修复该文件并提交即可。


看起来Mercurial把我的本地副本移动到了test.h.orig,而test.h现在来自另一个分支...有没有办法防止创建.orig文件,以免意外添加? - lajos
我不确定是否可能,但您可以将*.orig添加到您的.hgignore文件中。 - avakar
18
如果您只是编辑文件并提交,可能无法将其识别为两个分支的合并,而仅仅是工作分支上的新提交。 我认为您需要手动修复该文件,然后执行“hg resolve -m test.h”将文件标记为已合并状态。 - Nick Zalutskiy
无论 'hg merge' 失败解决某些冲突文件,第二个父目录都会自动添加到工作目录中。 - avakar
8
注意:此答案适用于hg pre 1.1版本。 - Nick
1
@lajos,您能否接受下面(现在)正确的答案呢? - akuhn

10

跟踪冲突在Mercurial 1.1中引入,这是您正在使用的较新版本(您应该升级,Mercurial 1.1发布于2008年12月)。 在那个版本中,您获得了与svn resolve类似的resolve命令。

就我记得而言,当存在冲突时,Mercurial会在文件中留下合并标记(<<<<>>>>行),除非您已配置合并工具。这也适用于更新版本--如果发生冲突,我没有配置合并工具,就会得到合并标记。然后我可以手动修复文件,并使用hg resolve标记为已解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接