未跟踪文件被删后git无法恢复,因其仅管理已跟踪文件;唯一可靠恢复方式是vs code的local history(默认开启),需右键原目录→“open timeline”→“revert change”。

未跟踪文件被删,Git 根本不知道它存在
VS Code 里删掉的文件如果没被 git add 过,Git 就没存过它的快照,自然没法用 git checkout 或 git restore 找回来。这不是 VS Code 的问题,是 Git 的设计逻辑:只管“已跟踪”文件。
常见错误现象:
– 在 VS Code 资源管理器里右键删了新写的 utils.js,再执行 git restore utils.js 报错 “not a tracked path”
– git status 完全不显示这个文件,以为还能从 Git 撞大运捞回来
- 唯一可靠前提:该文件曾被编辑过,且 VS Code 的本地历史(Local History)功能处于开启状态(默认开启)
- VS Code 不会自动备份未保存的草稿;如果删之前根本没保存过,那真的没了
- Windows/macOS 系统回收站/废纸篓是第一道防线——先去那里翻一翻
用 VS Code 内置 Local History 快速恢复
VS Code 自带的 Local History 会在后台静默保存你每次保存时的文件快照(含未跟踪文件),只要没手动关掉,大概率有救。
- 在资源管理器中右键目标文件夹 → “Reveal in Explorer”(确保路径正确)
- 右键已删除文件**原所在目录** → “Open Timeline”(不是右键空白处,是右键父文件夹)
- 时间线里找删除前最近的条目,右键 → “Revert Change” 或拖拽对应版本到编辑器恢复
- 注意:Local History 默认保留 30 天,且按磁盘空间自动清理;SSD 空间吃紧时可能提前丢旧记录
命令行补救:检查 .git/fsmonitor--* 和 stashed untracked?
极少数情况,如果你开过 core.fsmonitor 或用过实验性功能,Git 可能短暂缓存过未跟踪文件的 inode 信息,但别抱希望——这不属于稳定行为。
-
git clean -n -d是危险操作,只用于预览将删什么,**绝不能用来恢复** -
git stash push --include-untracked只对当前工作区“尚存”的未跟踪文件有效,删完再运行毫无作用 - 第三方工具如
git-fs或git-undel均不被官方支持,且依赖文件系统级痕迹(ext4/xfs 的 journal、APFS 快照等),成功率低且不可控
预防比抢救重要:三招堵死这类丢失
真正省心的做法,是让未跟踪文件“自动变跟踪”,或至少留下可追溯的副本。
- 新建项目立刻执行
git init && git add . && git commit -m "init",哪怕只有 README.md——后续所有新增文件都容易追踪 - 在 VS Code 设置里搜
files.autoSave,设为afterDelay(默认 1000ms),避免写一半崩溃+误删双杀 - 启用系统级定时备份(macOS Time Machine / Windows File History),重点监控你的 workspace 目录
Local History 不是永远可靠的保险柜,尤其在重装系统、迁移工作区或清空 VS Code 缓存后,那些快照就真没了。










