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

Git执行git merge master时未修改文件被自动提交如何解决

Git合并master后大量未修改文件被标记为已修改问题

问题场景

在个人开发分支执行git merge master合并master分支最新代码,操作完成后执行git status查看仓库状态,大量从未编辑修改过的文件被标记为已提交状态。初步怀疑异常和Linux Ubuntu系统有关,已尝试执行git merge --abort终止本次合并后重新操作,问题仍然复现,异常状态截图如下:
运行状态截图1
运行状态截图2

问题原因

该问题和Ubuntu系统本身无直接关联,属于跨系统协作开发时Git配置不匹配的常见问题:

  • Git默认开启文件可执行权限位(即文件mode的+x属性)跟踪,只要文件的可执行权限和当前分支记录的不一致,哪怕文件内容完全没有改动,Git也会将其判定为已修改。这种权限差异通常来自不同操作系统的权限机制区别:Windows系统不区分类Unix系统的可执行权限位、不同开发者设备的umask配置不同、协作者提交时误修改了文件权限,都会导致合并时出现批量无内容改动的文件变更记录。
  • 定位方式:执行命令git config core.fileMode,如果返回结果为true,即可确认是该配置导致的异常。

解决方法

  1. 先清理当前异常的工作区状态:
    如果当前还处于合并流程中,执行git merge --abort终止合并;如果已经退出合并流程,执行git reset --hard HEAD回到当前分支的干净提交节点。
  2. 关闭Git对文件可执行权限位的跟踪,单仓库生效执行:
    git config core.fileMode false
    如果需要让本机所有Git仓库都默认关闭该配置,添加全局参数执行:
    git config --global core.fileMode false
  3. 重新执行合并操作:
    git merge master
  4. 合并完成后执行git status验证,之前未编辑过的文件不会再出现在变更列表中。

其他排查方向

如果关闭权限位跟踪后问题仍然存在,可依次检查以下配置:

  • 换行符配置不匹配:Ubuntu环境建议将自动换行配置设置为input,执行命令git config core.autocrlf input即可,避免Windows系统的CRLF换行符和Linux的LF换行符差异导致批量文件被判定为修改。
  • 暂存区脏数据:执行git rm --cached -r .清空暂存区跟踪记录(该操作不会删除本地磁盘上的实际文件,仅清除Git暂存区的缓存),之后重新添加需要提交的文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:31:01