未更改的文件上的 Git 合并冲突

lig*_*ray 8 git merge conflict

我已经回答了以下问题:

  1. 仅由一个分支更改的文件的 Git 合并冲突
  2. 如何避免在未触及的文件上出现 git 错误/冲突?
  3. 未完成更改时 Git 合并冲突

但我没有找到合理的解释。所以想开个新帖。

问题:当我将“master”合并到我的开发人员分支 (dev-branch) 时,我在 dev-branch 上没有修改过的文件发生合并冲突。

程序

  • git结帐大师
  • git pull --ff-only(将主分支更新为最新更改)
  • git checkout 开发分支
  • git merge --squash master
  • 导致我未修改的文件发生冲突

问题

  1. 为什么我会看到冲突?
  2. 为什么 GIT 不能自动解析它们,因为我的分支没有变化?
  3. 我该怎么做才能避免这些冲突?

===编辑:2019 年 6 月 12 日===

我开始观察我的合并行为以缩小问题范围并发现以下内容。每当我开发需要很长时间的东西时,我倾向于经常更新我的开发分支,以避免必须进行一次大的合并。

如果我在分支上工作,例如dev_branch,我曾经将master合并到dev_branch,然后继续我的开发,并每隔一段时间重复此步骤。但是我发现有用的是实际上将dev_branch合并到master并再次从它分支到一个新的开发分支dev_branch_1(请注意,由于开发尚未完成,我尚未在master上提交任何内容)并继续在新分支上进行开发。到目前为止,这似乎对我有用,可以避免这些讨厌的合并冲突。

zer*_*287 0

基于这个问题,问题在于git merge --squash master

git merge --squash产生非合并提交。因此,Git 不会将您要合并的提交识别为合并基础。这会导致不需要的合并结果。

正如我可以想象的那样,第一次压缩的提交不会有任何“假”冲突,但第二次当你用 git 将 master 合并到你的分支时无法找到共同的祖先,它会选择你的dev_branch--squash上的初始提交,而不是那个你已经与南瓜合并了。 因此,冲突是基于 master 上第一次合并的提交和 master 上最新提交之间的差异。