最近我遇到了 Git 自动合并的奇怪问题。我(和我的一位同事)在主题分支上进行提交,但是当我尝试将它与我们的主分支合并时,Git 无法自动合并几乎所有在主分支中更改的文件,并迫使我手动解决冲突。使用 mergetool 执行此操作时,文件中不会显示冲突,并且我们主题分支上的文件看起来与“基本”文件相同。所以解析速度很快,但对于更多的文件仍然很烦人。我今天经历了一种这样的合并(有超过 10 个文件被标记为“冲突”),现在又有一个包含更多冲突文件的文件。我也尝试将 master 与我们的主题分支合并,但结果是一样的。
Eclipse 实际上在我们的临时分支中显示了冲突文件的提交,但是当将该提交中的文件与该提交父级进行比较时,该文件中没有任何更改。显示更改的提交在我的同事所做的合并提交中(但未显示在冲突文件列表或任何内容中)。老实说,我怀疑我的同事甚至会打开这些文件,因为它们与他的工作无关(他就是这么说的)。
这种行为的原因可能是什么以及如何阻止这种行为?我唯一能想到的是一些编码问题,这些问题没有在 mergetool 或 Eclipse diff 中显示,但对 Git 很重要。
编辑:我检查了我们分支中的合并提交与其父提交之间的差异,确实问题是由于 endlines (git diff 显示的不仅仅是 Eclipse 比较)。合并提交将 CRLF 替换为 LF。那是应该发生的事情(我们在 git config 中将 core.autocrlf 设置为 true),但是其他一名员工使用 CRLF endlines(他在他的存储库中将 core.autocrlf 设置为 false,他不知道为什么会这样)是这样设置的)。