我发现以下案例。
$ hg init
$ echo '
> line 1
> line 2
> ' > file.txt
$ hg add file.txt
$ hg commit -m 'added'
$ echo '
> line 11
> line 2
> ' > file.txt
$ hg commit -m 'changed line 1'
$ hg update 0
$ echo '
> line 1
> line 21
> ' > file.txt
$ hg commit -m 'changed line 2'
$ hg merge 1
结果:
合并file.txt失败!
hg diff file.txt
diff -r bc62305d407b file.txt
--- a/file.txt Fri Jun 17 22:53:22 2011 +0300
+++ b/file.txt Fri Jun 17 22:53:46 2011 +0300
@@ -1,4 +1,9 @@
+<<<<<<< local
line 1
line 21
+=======
+line 11
+line 2
+>>>>>>> other
如果我们尝试上述方案,但是有3行并且更改在1和2行,则合并将成功。 那么,我的问题为什么会这样呢?这是合并算法或其他问题吗?
答案 0 :(得分:2)
Mercurial无法自动合并,因为人类必须解决冲突。如果合并版本应该包含
,Mercurial应该如何知道line 1
line 21
或
line 11
line 2
Mercurial并未将合并的一方视为可以优先考虑的权威。 file.txt
中的标记是Mercurial为您提供需要的提示。
但是,您可以通过configuring an interactive merge tool避免此类文件内标记用于冲突。另请查看this related question。