git上的奇怪冲突

Meh*_*hdi 5 git diff git-diff diff3 kdiff3

我读了一篇关于三向合并的文章(diff3).它给出了一个如何检测冲突的示例.例子是:

A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]
Run Code Online (Sandbox Code Playgroud)

在第一次计算OA和OB之后的差异时:

A=[1,4,5,2,3,   ,6]
O=[1,   ,2,3,4,5,6] 
Run Code Online (Sandbox Code Playgroud)

和

O=[1,2,3,4,5, ,6] 
B=[1,2, ,4,5,3,6]
Run Code Online (Sandbox Code Playgroud)

之后diff3 parse:

A=[1,4,5,2,   3    ,6]
O=[1,   ,2, 3,4,5  ,6] <<< Origin
B=[1,   ,2, 4,5,3  ,6]
Run Code Online (Sandbox Code Playgroud)

在发现冲突后:

1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6
Run Code Online (Sandbox Code Playgroud)

按照这种方法来检测冲突,我尝试一个简单的例子:最初我有文件:

a;
b;
Run Code Online (Sandbox Code Playgroud)

我做了更新用户1更新"a;","a=0;" 用户2更新"b;","b=0;" 我得到这个结果:

xx
<<<<<<< A
int a=0;
int b;
||||||| O
int a;
int b;
=======
int a;
int b=0;
>>>
Run Code Online (Sandbox Code Playgroud)

当我合并这两个文件时,即使我没有在同一位置改变,我也有冲突(a and b are not at the same position)!有人可以解释我为什么会有这种冲突?

ssc*_*rth 1

这个问题与这个问题非常相似,答案也是:这是因为每个差异块不仅包含字面差异,还包含一些上下文行,这些行需要在添加了一些行的文件中定位差异/ 被删除,因此块偏移量发生了变化。上下文中的差异也是冲突,因为根据您首先应用的补丁,您将更改另一个补丁的上下文。