仅由一个分支更改的文件发生 Git 合并冲突

ohc*_*ibi 2 git git-merge

我在http://github.com/ohcibi/prezto有一个 zprezto 的分支

重现我的问题:

  1. git clone http://github.com/ohcibi/prezto
  2. cd prezto
  3. git checkout ohcibi(我有一个分支叫这个名字,这里没有错别字!)
  4. git merge master
  5. 显示一堆冲突

提交日志显示,ohcibi自 4 月 26 日左右上次合并提交以来,只有 3 个提交是新的。所有 3 次提交都不会触及任何冲突的文件(除了一个预计会发生冲突的文件)。

但为什么该合并与其他文件甚至还有冲突呢.gitmodules

注意:我不需要帮助解决合并冲突!我知道如何做到这一点,并且我故意没有将“添加”git-merge-conflict-resolution-tag到该问题,因为这将是一个错误的标签(所以它没有丢失,不要添加它!)。我想知道为什么这些冲突首先发生(假设冲突文件在两个分支中都没有更改,据我所知,这是合并冲突的常见原因)。

Lig*_*der 5

Git 使用树上的三个点来进行合并:您的分支的头部、您要合并的分支的头部以及两者最近的共同祖先。如有疑问,您可以运行merge-base管道命令来找出 git 在最近的共同祖先中看到的提交。

git merge-base <branch1> <branch2>
Run Code Online (Sandbox Code Playgroud)

运行该命令我发现合并库是4f87376b5

距离您上次将 master 合并到您的分支已经过去了不到 5 个月的时间。当您合并时,master 指向 2017-04-24 所做的提交。(现在它是当前合并的合并基础。)

自那时起,master 分支上已进行了 123 次提交,最近一次提交于 2017 年 9 月 19 日。这 123 个提交可能与分支上无法从 master 访问的 137 个提交中的任何更改发生冲突。

Git 并不关注“提交数量”或提交的时间和地点。它所关注的只是每个分支头和合并基础之间的累积差异。您可以运行git diff 4f87376b5 ohcibigit diff 4f87376b5 origin/master查看合并双方所集成的更改范围。