You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git文件模式变更冲突的理解与解决方案

解决Git中"File mode changed in both source and destination"冲突(非忽略方案)

问题本质

虽然ls显示两个分支的文件权限字符串一致(均为-rw-rw-r--),但Git实际追踪的是文件的执行权限位(即是否包含x权限),同时文件大小差异说明内容存在不可见差异(如换行符、末尾空格),两者叠加引发了冲突。

分步解决方法

1. 确认Git感知到的权限与内容差异

执行以下命令,查看Git识别到的具体变化:

git diff develop my-branch -- path/to/file.py

输出中会显示:

  • 文件模式变化:如old mode 100644/new mode 100755,这是Git判定模式冲突的核心依据
  • 内容差异:会列出文件中具体的字符变化(包括换行符、空格等不可见内容)

也可通过数字权限确认实际差异:

# 在develop分支执行
stat -c "%a %n" path/to/file.py
# 在你的分支执行
stat -c "%a %n" path/to/file.py

644对应rw-rw-r--,755对应rwxr-xr-x,对比两个分支的数字权限是否一致。

2. 修正文件模式

如果确实存在执行权限的误修改,在你的分支中调整权限与develop分支一致:

# 假设develop分支的数字权限是644
chmod 644 path/to/file.py
# 提交权限修正
git add path/to/file.py
git commit -m "fix: correct file mode for path/to/file.py"

3. 修复文件内容差异

根据git diff的结果,手动修正文件中的内容差异(如统一换行符、删除多余空格等),然后提交:

git add path/to/file.py
git commit -m "fix: resolve content differences in path/to/file.py"

4. 重新处理合并与PR

将develop分支合并到你的分支:

git merge develop

若仍有内容冲突,按常规流程解决后提交。最后推送更新后的分支到远程,Bitbucket的PR即可正常处理。

补充说明

Git仅追踪文件的执行权限位,而非全部权限。跨系统操作(如Windows与Linux切换)时,换行符自动转换可能导致文件内容变化,同时Git可能自动调整文件权限,进而触发这类冲突。

内容的提问来源于stack exchange,提问作者AssertionError

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:26:08