未更改的文件上的 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,我曾经将 master 合并到 dev_branch,然后继续我的开发,并重复此操作每隔一段时间就走一步。但我发现有用的是实际上将 dev_branch 合并到 master 并再次从它分支到新的开发分支 dev_branch_1 (请注意,我是尚未在 master 上提交任何内容,因为开发尚未完成)并在新分支上继续开发。到目前为止,这似乎对我有用,可以避免这些讨厌的合并冲突。
【问题讨论】:
会不会是你弄错了行尾?因为你得到冲突的原因是因为文件被改变了。 绝对不是行尾,因为当我开始解决这些冲突时,它们确实是实际的代码更改。 【参考方案1】:基于this question,问题出在git merge --squash master
git merge --squash
产生非合并提交。因此,Git 不会将您要合并的提交识别为合并基础。这会导致不需要的合并结果。
我可以想象第一次压扁的提交不会有任何“假”冲突,但是第二次当你将 master 合并到你的分支中时 --squash
git 找不到共同的祖先,它会选择初始提交在您的 dev_branch 上,而不是您已经与壁球合并的那个。
因此,冲突基于 master 上的第一个合并提交和 master 上的最新提交之间的差异。
【讨论】:
以上是关于未更改的文件上的 Git 合并冲突的主要内容,如果未能解决你的问题,请参考以下文章