Git报告合并冲突但文件内容完全一致,原因何在?
以下是具体排查方向:
行尾换行符差异
Git会自动处理LF/CRLF换行符转换,若两个分支的core.autocrlf配置不同,或文件换行符存储方式有差异,即便内容看起来一致,Git也会判定冲突。可执行git diff --no-index --stat <file1> <file2>对比,或用cat -A <file>查看换行符(LF显示为$,CRLF显示为^M$)。文件权限变更
Git会跟踪文件权限(如可执行权限),若同一文件在两个分支的权限不同(比如一个是644,一个是755),合并时会触发冲突。执行git ls-files --stage查看文件权限位(输出前四位,如100644),对比两个分支的结果。隐藏字符或编码差异
文件可能存在不可见空白字符(空格/制表符数量差异、全角空格),或编码不同(UTF-8带BOM vs 无BOM)。用git diff --word-diff查看细微字符差异,或hexdump -C <file>对比十六进制编码。Git索引或缓存异常
本地索引损坏可能导致Git误判文件状态。可尝试:- 清理索引后重新添加:
git rm --cached <file>,再执行git add <file>,之后重试合并。 - 拉取最新分支:备份本地修改后,执行
git fetch origin,切换到master分支执行git pull origin master,再尝试合并development/Server。
- 清理索引后重新添加:
分支历史的冲突标记残留
之前的合并操作可能遗留未处理的冲突标记,或分支提交历史存在特殊合并节点导致Git误判。执行git log --oneline --graph master development/Server查看分支历史,检查是否有异常合并节点。Git对象库损坏
极端情况是本地Git对象库损坏,导致文件哈希值计算错误。执行git fsck检查仓库完整性,若有损坏则修复对应对象。
内容的提问来源于stack exchange,提问作者Veljko

