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

Posted

技术标签:

【中文标题】未更改的文件上的 Git 合并冲突【英文标题】:Git merge conflicts on files that are NOT changed 【发布时间】:2019-07-25 15:19:22 【问题描述】:

我已经回答了以下问题:

    Git merge conflicts on files that are changed by one branch only How to avoid getting git errors/conflicts on untouched files? Git merge conflicts when no changes done

但我没有找到合理的解释。所以试图打开一个新线程。

问题:当我将“master”合并到我的开发分支 (dev-branch) 时,我在 dev-branch 上未修改的文件出现合并冲突。

程序

git checkout master git pull --ff-only(更新主分支到最新的变化) git checkout dev-branch git merge --squash master 导致我未修改的文件发生冲突

问题

    为什么我会看到冲突? 为什么 GIT 不能自动解决它们,因为我的分支上没有任何更改? 如何避免这些冲突?

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

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

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

【问题讨论】:

会不会是你弄错了行尾?因为你得到冲突的原因是因为文件改变了。 绝对不是行尾,因为当我开始解决这些冲突时,它们确实是实际的代码更改。 【参考方案1】:

基于this question,问题出在git merge --squash master

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

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

【讨论】:

以上是关于未更改的文件上的 Git 合并冲突的主要内容,如果未能解决你的问题,请参考以下文章

解决冲突后的Xcode 9.3 Git合并问题

git:比较更改

在拉取期间解决 Git 合并冲突以支持其更改

如何将本地未提交的更改合并到另一个 Git 分支?

Visual Studio Code 如何解决与 git 的合并冲突?

更改 git 合并分支冲突消息 [重复]