为什么git有时会将添加的行标记为已更改的行(即添加的代码段上的空冲突)

时间:2011-11-30 14:27:46

标签: git merge conflict git-merge merge-conflict-resolution

我仍然没有确定的方法来重现这个,但如果这是一个众所周知的问题,我还是会问它。会发生什么是git经常会产生这样的冲突:

<<<<<<< HEAD
  } // action_do_add
=======
  } // action_do_add
...lots of code here...
>>>>>>> some_branch

因此,我没有注意到我只是添加了一段新代码,而是认为我修改了整行代码。这有时会发生在文件的中间,但最常见的是 - 在文件的末尾。我的猜测是它可能与行尾字符有关,但我还是必须运行测试来确认这一点。有没有人有同样的问题,如果是,你如何解决它?

1 个答案:

答案 0 :(得分:5)

合并时,git会检查上下文中的差异。请考虑以下代码:

def a
  do_something_a
end

def b
  do_something_b
end

def c
  do_something_c
end

当一个分支在方法a中更改某个内容(或删除它),而另一个分支在方法c中更改某些内容(或删除它)时,您仍然拥有方法{{1}的上下文对于两个差异。这就是为什么这些变化可能会在没有冲突的情况下合并。

但是,如果您有这样的事情:

b

在一个分支中编辑一个方法而在另一个分支中编辑另一个方法时,您很可能会遇到冲突,因为打破了另一个分支中差异的相应上下文。

这也是为什么它经常发生在文件末尾的原因 - 因为只有上面的上下文,但没有下面的。