最近我启用了diff3,现在解决冲突要容易得多。
以前,在某些情况下,我必须检查日志,以了解人们为什么要做这个和那个来做合并。但使用diff3时,所有信息都显示在一个地方
<<<<<<< HEAD
THIS IS USEFUL
||||||| merged common ancestors
This is useful
=======
This is really useful
>>>>>>> c2392943.....由此我们可以很容易地看出结果应该是“这真的很有用”
我想知道diff3有没有什么缺点?为什么它不是git的默认行为?
发布于 2020-09-04 18:47:18
diff3应为默认值。它不仅对解决冲突有用,而且使解决冲突成为可能。使用(仅)默认的合并冲突样式几乎不可能正确地解决冲突。我建议每个人在他们的全局选项中设置diff3。
git config --global merge.conflictStyle diff3为什么从字面上讲这是不可能的?考虑一个分支,它在特定的源文件位置添加了一个函数foo1
def foo1():
print("foo1")以及在同一位置添加函数foo2的另一个分支
def foo2():
print("foo2")如果我把一个放在另一个上,我会得到一个冲突。将显示默认的合并冲突样式
++<<<<<<< HEAD
+def foo1():
+ print("foo1")
++=======
+ def foo2():
+ print("foo2")
++>>>>>>> Add foo2冲突标记告诉我什么?他们告诉我我需要将foo1和foo2都添加到文件中,对吗?不幸的是没有!假设一个文件中已经存在foo1和foo2,以及两个分支,其中一个删除foo1,另一个删除foo2。如果我把一个放在另一个上,结果会是什么?将显示默认的合并冲突样式
++<<<<<<< HEAD
+def foo1():
+ print("foo1")
++=======
+ def foo2():
+ print("foo2")
++>>>>>>> Remove foo1在默认的冲突样式下,删除两个函数的情况与添加两个函数的情况完全没有区别(除了提交消息的文本,它只能是一个提示)!因此,对于解决冲突来说,这是不够的。这可能解释了为什么解决冲突被视为一门黑暗的艺术。diff3不仅使其成为可能,而且常常使其变得容易。
发布于 2020-05-22 04:52:14
为什么它不是git的默认行为?
我认为这不是默认的,因为git mergetool在顶部显示了3个面板:本地、基本(共同祖先)和远程+底部的第四个面板,其中包含您在问题中所写的内容。
因此,如果启用diff3并使用mergetool,则会在顶部中间的面板和底部面板中|和========之间的部分中复制信息。
https://stackoverflow.com/questions/27417656
复制相似问题