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

Git status显示本地未删除文件为已删除,切换分支后问题反复出现

问题成因
  • 大小写不敏感文件系统冲突:这是该类问题最常见的诱因。Windows、macOS默认使用大小写不敏感的文件系统(如默认配置的NTFS、APFS),如果你切换的其他分支中存在同名但大小写不同的文件(比如后缀为小写的xyz.png),切换分支时文件系统会把两个大小写不同的文件视为同一个,直接覆盖内容。等你切回master分支时,Git要匹配的是xyz.PNG(大写后缀),但磁盘上留存的是小写版本,就会判定原大写文件被删除。
  • Git钩子自动操作:如果仓库配置了post-checkout钩子脚本,可能在切换分支完成后自动执行预设的清理逻辑,误删了该PNG文件。
  • 第三方软件干扰:如果仓库目录处于同步盘(OneDrive、iCloud、国内网盘等)的同步范围,或是被杀毒软件、企业安全管控软件监控,可能在切换分支产生文件变动的瞬间,被这类软件误判为风险文件自动删除。
  • Git配置不匹配:如果本地Git的core.ignorecase配置和实际文件系统特性不匹配,比如文件系统是大小写不敏感,但手动将core.ignorecase设为了false,也会引发文件识别异常。
彻底解决方法
  1. 优先排查大小写冲突
    执行以下命令查看不同分支的同名文件大小写情况:
# 查看master分支下该文件的真实文件名
git ls-tree master --name-only | grep -i xyz.png
# 查看你切换过的其他分支下的同名文件真实文件名
git ls-tree 其他分支名 --name-only | grep -i xyz.png

如果确认存在大小写不同的两个文件,统一两个分支的文件名大小写即可解决,建议统一使用全小写避免跨平台冲突:

# 先在master分支执行改名
git mv xyz.PNG xyz.png
git commit -m "统一PNG文件大小写,避免跨平台冲突"
git push
# 切到其他分支执行同样的改名操作合并即可
  1. 排查Git钩子
    查看仓库.git/hooks目录下是否存在非.sample后缀的post-checkout文件,打开检查是否包含删除文件的相关逻辑,不需要的钩子直接删除该文件即可。
  2. 排查第三方软件干扰
    把仓库移动到非同步目录、临时关闭杀毒软件监控后再测试切换分支,如果问题不再出现,将仓库目录加入对应软件的白名单即可。
  3. 修正Git配置
    Windows、macOS下执行以下命令,确保配置和文件系统特性匹配:
git config --local core.ignorecase true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:06