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

时间:2017-09-20 15:49:23

标签: 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. 显示了一堆冲突
  6. 提交日志显示ohcibi中只有3次提交,这是自上次合并提交以来的新提交,即4月26日左右。所有3次提交都不会触及任何冲突的文件(除了一个可能出现混淆的文件)。

    但为什么合并在其他文件甚至.gitmodules上也会发生冲突?

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

1 个答案:

答案 0 :(得分:3)

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

git merge-base <branch1> <branch2>

运行该命令我发现mergebase为4f87376b5

自上次将大师合并到您的分支机构以来,已经过了5个月了。合并后,master指向2017-04-24上的提交。 (现在是您当前合并的合并基础。)

自那时起,主分公司已提交了123份提交,最近一次是在2017-09-19。这123个提交可能与您的分支上无法从主服务器上提交的137个提交中的任何更改发生冲突。

Git并未查看“提交次数”或发生的时间和地点。它所看到的只是每个分支头和合并基础之间的累积差异。您可以运行git diff 4f87376b5 ohcibigit diff 4f87376b5 origin/master来查看从合并的每一侧集成的更改范围。