Git合并时新路径文件报both modified的异常问题咨询
Git合并冲突解析:文件移动未被识别+both modified异常
关键原因:合并三版本的文件状态冲突
Git合并时会对比三个节点的文件:
- 共同祖先节点:两个分支分叉前的最后一个公共提交
- 当前
develop分支(HEAD) - 待合并的
refactored分支
你用git ls-files -s /Common/Core/Core.cs看到该文件在三个阶段都存在,这说明:
- 你的认知有误:
develop分支并非“原本不存在”这个路径——要么共同祖先里就有Common/Core/Core.cs,要么在你合并前,develop分支的后续提交里有人创建了这个文件。 - 因为
develop和refactored分支都对Common/Core/Core.cs做了修改,Git直接标记为both modified,完全没触发文件移动的检测逻辑。
为什么文件移动没被Git识别?
Git不会主动追踪路径变更,它是通过内容相似度判断文件是否被移动的(默认阈值50%以上)。这次没检测到,大概率是这两个情况:
Shared/src/Core/Core.cs和refactored分支里的Common/Core/Core.cs内容差异太大,Git没法把二者关联成“移动”操作。- 由于
Common/Core/Core.cs本身存在三版本冲突,Git优先处理这个冲突,直接跳过了对Shared/src/Core/Core.cs的移动检测。
验证与修复步骤
- 先确认共同祖先的状态:
# 获取共同祖先哈希 git merge-base develop refactored # 查看祖先节点下是否存在该文件 git show <祖先哈希>:Common/Core/Core.cs - 手动处理冲突:
- 打开
Common/Core/Core.cs,合并两个分支的修改内容。 - 确认
Shared/src/Core/Core.cs是废弃文件,执行git rm Shared/src/Core/Core.cs。
- 打开
- 提交合并结果:
git add . git commit
内容的提问来源于stack exchange,提问作者langecode
相关产品推荐
相关产品推荐

