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

Eug*_*ene 5 git merge conflict git-merge merge-conflict-resolution

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

<<<<<<< HEAD
  } // action_do_add
=======
  } // action_do_add
...lots of code here...
>>>>>>> some_branch
Run Code Online (Sandbox Code Playgroud)

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

awe*_*ndt 5

合并时,git会检查上下文与周围行的差异.考虑以下代码:

def a
  do_something_a
end

def b
  do_something_b
end

def c
  do_something_c
end
Run Code Online (Sandbox Code Playgroud)

当一个分支在方法中更改某些内容a(或删除它),而另一个分支在方法中更改某些内容c(或删除它)时,您仍然拥有b两个diff 的方法上下文.这就是为什么变化可能会合并而不会发生冲突.

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

def a
  do_something_a
end

def c
  do_something_c
end
Run Code Online (Sandbox Code Playgroud)

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

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