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

Git无法清除工作区未跟踪变更 残留已删除/未跟踪文件

问题根因

这个问题和你有没有开GUI客户端、IDE没关系,核心原因是develop分支的提交历史里被存入了一个带非法文件名字符(半角冒号:)的无效文件:

  • Git索引中记录的该文件完整路径为 src/use_cases/aggregator/update_stores_status_use_case.py~other: (UseCase) Refactor naming,半角冒号是Windows NTFS、macOS APFS文件系统的保留字符,不允许出现在文件名中,只有Linux的ext4等文件系统支持这类命名
  • 你切换到develop分支时,操作系统根本无法创建这个带冒号的文件,只会自动截断文件名,生成残缺的src/use_cases/aggregator/update_stores_status_use_case.py~other文件,也就是你看到的??状态未跟踪文件
  • Git检测到索引里登记的长文件名文件在工作区不存在,就会一直显示D(已删除)的变更标记。你之前执行的git clean/git reset/git checkout要么只能删掉截断生成的残缺文件,要么因为无法匹配/恢复系统根本不支持创建的非法文件名文件,没法消除这个删除记录。哪怕删了仓库重克隆,只要切到develop分支拉到这个带非法文件的提交,问题就会复现。这类带~后缀的文件基本都是编辑器自动生成的临时备份,本来就不该提交进版本库。
解决步骤

按照下面的顺序操作,一次就能清干净,而且能彻底避免后续复现:

  • 先清理工作区的残缺临时文件
    执行强制清理命令删掉系统自动生成的截断文件:
    git clean -f src/use_cases/aggregator/
    
    如果命令执行完文件还在,直接打开对应目录手动删除update_stores_status_use_case.py~other即可。
  • 移除Git索引里的非法文件记录
    这一步是消除顽固D标记的核心,直接从Git索引中删除这个系统无法正常识别的无效条目即可,注意文件名要和git status里显示的D状态的文件名完全一致,用双引号包裹避免特殊字符转义问题:
    git rm --cached "src/use_cases/aggregator/update_stores_status_use_case.py~other: (UseCase) Refactor naming"
    
    如果执行时提示路径不匹配,先跑下面的命令列出索引中该目录下的所有真实登记文件,复制输出结果里的完整长文件名再执行删除:
    git ls-files src/use_cases/aggregator/
    
  • 提交修正到远程,彻底解决问题
    这个非法文件是存在于远程develop分支的提交里的,只在本地删除索引的话,下次拉取代码还是会复现,直接提交修正推到远程即可:
    git commit -m "chore: remove invalid backup file with illegal filename"
    git push origin develop
    
后续预防

你可以在仓库根目录的.gitignore文件里加一行规则,全局忽略这类临时备份文件,避免以后再出现误提交:

# 忽略编辑器生成的~后缀备份文件
*~

内容的提问来源于stack exchange,提问作者J. García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:15:44