git上的奇怪冲突

时间:2013-05-14 14:39:15

标签: git diff git-diff kdiff3 diff3

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

A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]

第一次计算O-A和O-B之后的差异:

A=[1,4,5,2,3,   ,6]
O=[1,   ,2,3,4,5,6] 

O=[1,2,3,4,5, ,6] 
B=[1,2, ,4,5,3,6]

制作diff3 parse之后:

A=[1,4,5,2,   3    ,6]
O=[1,   ,2, 3,4,5  ,6] <<< Origin
B=[1,   ,2, 4,5,3  ,6]

在发现冲突后:

1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6

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

a;
b;

我做了更新     用户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;
>>>

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

1 个答案:

答案 0 :(得分:1)

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