首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在git上diff3应该是默认的冲突样式吗?

在git上diff3应该是默认的冲突样式吗?
EN

Stack Overflow用户
提问于 2014-12-11 15:42:21
回答 2查看 13.7K关注 0票数 51

最近我启用了diff3,现在解决冲突要容易得多。

以前,在某些情况下,我必须检查日志,以了解人们为什么要做这个和那个来做合并。但使用diff3时,所有信息都显示在一个地方

代码语言:javascript
复制
<<<<<<< HEAD
THIS IS USEFUL
||||||| merged common ancestors
This is useful
=======
This is really useful
>>>>>>> c2392943.....

由此我们可以很容易地看出结果应该是“这真的很有用”

我想知道diff3有没有什么缺点?为什么它不是git的默认行为?

EN

回答 2

Stack Overflow用户

发布于 2020-09-04 18:47:18

diff3应为默认值。它不仅对解决冲突有用,而且使解决冲突成为可能。使用(仅)默认的合并冲突样式几乎不可能正确地解决冲突。我建议每个人在他们的全局选项中设置diff3

代码语言:javascript
复制
git config --global merge.conflictStyle diff3

为什么从字面上讲这是不可能的?考虑一个分支,它在特定的源文件位置添加了一个函数foo1

代码语言:javascript
复制
def foo1():
    print("foo1")

以及在同一位置添加函数foo2的另一个分支

代码语言:javascript
复制
def foo2():
    print("foo2")

如果我把一个放在另一个上,我会得到一个冲突。将显示默认的合并冲突样式

代码语言:javascript
复制
++<<<<<<< HEAD
 +def foo1():
 +    print("foo1")
++=======
+ def foo2():
+     print("foo2")
++>>>>>>> Add foo2

冲突标记告诉我什么?他们告诉我我需要将foo1foo2都添加到文件中,对吗?不幸的是没有!假设一个文件中已经存在foo1foo2,以及两个分支,其中一个删除foo1,另一个删除foo2。如果我把一个放在另一个上,结果会是什么?将显示默认的合并冲突样式

代码语言:javascript
复制
++<<<<<<< HEAD
 +def foo1():
 +    print("foo1")
++=======
+ def foo2():
+     print("foo2")
++>>>>>>> Remove foo1

在默认的冲突样式下,删除两个函数的情况与添加两个函数的情况完全没有区别(除了提交消息的文本,它只能是一个提示)!因此,对于解决冲突来说,这是不够的。这可能解释了为什么解决冲突被视为一门黑暗的艺术。diff3不仅使其成为可能,而且常常使其变得容易。

票数 7
EN

Stack Overflow用户

发布于 2020-05-22 04:52:14

为什么它不是git的默认行为?

我认为这不是默认的,因为git mergetool在顶部显示了3个面板:本地、基本(共同祖先)和远程+底部的第四个面板,其中包含您在问题中所写的内容。

因此,如果启用diff3并使用mergetool,则会在顶部中间的面板和底部面板中|和========之间的部分中复制信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27417656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档