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

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

我仍然没有确定的方法来重现这个问题,但如果这是一个众所周知的问题,我还是会问的。发生的事情是 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/

相关文章:

android - 如何在 Eclipse 中为 Android 开发设置 Git 存储库?

svn - 合并到分支时发生冲突,删除代码中的一些更改

version-control - 如何阻止变更集在 TFS 中合并?

Git - merge 到 master 中总是会产生相同的冲突,即使上次已修复

git - 无法在 merge 过程中软重置 git 存储库,但没有 merge 可以中止

svn - git-svn:重置主人的跟踪

git - 查找在提交之间发生更改的目录

git - 为什么 git pull 之后会出现本地提交?

svn - 从 SVN 更新时是否可以始终(强制)覆盖本地更改?忽略冲突?

javascript - JQuery 1.61 版的 JQuery .on() 函数替代方案