5

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

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

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

4

1 回答 1

5

合并时,git 检查上下文与周围行的差异。考虑这段代码:

def a
  do_something_a
end

def b
  do_something_b
end

def c
  do_something_c
end

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

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

def a
  do_something_a
end

def c
  do_something_c
end

当您在一个分支中编辑一个方法而在另一个分支中编辑另一个方法时,您很可能最终会发生冲突,因为您破坏了另一个分支中差异的相应上下文

这也是为什么它更频繁地出现在文件末尾的原因——因为diff上面只有上下文,但下面没有。

于 2012-03-27T08:41:49.377 回答