我仍然没有确定的方法来重现这个问题,但如果这是一个众所周知的问题,我还是会问的。发生的事情是 git 经常会产生这样的冲突:
<<<<<<< HEAD
} // action_do_add
=======
} // action_do_add
...lots of code here...
>>>>>>> some_branch
因此,git 并没有注意到我只是添加了一段新代码,而是认为我修改了整行代码。这有时会发生在文件的中间,但最常见的是 - 在文件的末尾。我的猜测是它可能与行尾字符有关,但我还必须运行测试来确认这一点。有没有人遇到过同样的问题,如果有,你是如何解决的?
最佳答案
merge 时,git 检查上下文 与周围行的差异。考虑这段代码:
def a
do_something_a
end
def b
do_something_b
end
def c
do_something_c
end
当一个分支更改方法 a
中的内容(或删除它),而另一个分支更改方法 c
中的内容(或删除它)时,您仍然拥有上下文两种差异的方法 b
。这就是为什么这些更改可能会在没有冲突的情况下 merge 。
但是,如果你有这样的事情:
def a
do_something_a
end
def c
do_something_c
end
当您在一个分支中编辑一个方法而在另一个分支中编辑另一个方法时,您很可能最终会遇到冲突,因为您在另一个分支中破坏了 diff 的相应上下文。
这也是为什么它更常出现在文件末尾的原因——因为差异上方只有上下文,而下方没有上下文。
关于git - 为什么 git 有时会将添加的行标记为已更改的行(即对添加的代码段的空冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327459/