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

SourceTree暂存更改时自动删除部分文件问题求助

SourceTree暂存更改时自动删除部分文件异常

问题现象

  • 对文件添加注释后,修改后的文件可正常展示在未暂存更改列表中:
    未暂存更改列表中文件正常显示
  • 点击stage(暂存)按钮后,对应文件被彻底移除,暂存区、未暂存列表均无该文件条目:
    暂存操作后文件被移除
  • 异常仅在部分文件上触发,并非所有文件修改后都会出现该问题。

已尝试的无效修复操作

  • 卸载后重新安装SourceTree
  • 删除%AppData%/local路径下的SourceTree偏好配置文件

问题原因

该问题绝大多数情况是出问题的文件被设置了skip-worktree或assume-unchanged标记。这两个标记本来是用来告诉Git跳过跟踪本地对该文件的修改,常见于不需要提交本地改动的配置类文件。SourceTree对这两个标记的兼容存在长期未修复的bug:被标记的文件出现修改时,未暂存列表可以正常显示改动,但一旦点击暂存,SourceTree会直接按照标记规则丢弃本地改动,看起来就像文件被删掉了——实际是本地修改被清空,文件直接回到了仓库里的提交版本。
剩下的小概率原因有两个:一是文件路径、文件名里有SourceTree解析不了的特殊字符;二是多层级的git忽略规则(全局.gitignore、仓库.gitignore、.git/info/exclude)存在冲突,暂存时判定文件属于需要忽略的内容,直接从暂存队列里剔除。

修复步骤

  1. 优先排查标记问题:打开仓库所在文件夹,右键打开Git Bash终端,依次执行两条命令,检查出问题的文件是否在输出列表里:
    # 列出所有设置了assume-unchanged标记的文件
    git ls-files -v | grep '^h'
    # 列出所有设置了skip-worktree标记的文件
    git ls-files -v | grep '^S'
    
  2. 如果问题文件确实在列表里,执行对应命令移除标记就能恢复正常:
    # 移除assume-unchanged标记,把<文件路径>换成实际出问题的文件相对路径
    git update-index --no-assume-unchanged <文件路径>
    # 移除skip-worktree标记
    git update-index --no-skip-worktree <文件路径>
    
  3. 如果没查到标记,就检查忽略规则冲突,执行下面的命令看文件是不是被某条忽略规则命中了:
    git check-ignore -v <文件路径>
    
    如果命令输出了对应的忽略规则,修改对应位置的忽略配置,取消对该文件的忽略即可。
  4. 上述排查都没命中的话,检查问题文件的文件名、所在文件夹路径,把里面的全角空格、emoji、非常规特殊符号替换成普通半角字符,重启SourceTree再试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:24:44