优先检查git changes列表,存在则discard changes恢复;否则查local history快照;两者均失效再用recuva等系统级工具——顺序错误将导致恢复失败。

VSCode 误删文件,优先看它还在不在 Git 的 CHANGES 列表里;不在,就查 Local History 快照;两者都失效,才轮到系统级恢复工具——顺序错了,可能白忙活。
文件还在源代码管理面板里显示为 deleted
这是最省事的情况:文件没真丢,只是被 Git 标记为删除。VSCode 只是把 Git 的状态可视化了。
- 按
Ctrl+Shift+G打开源代码管理面板,在CHANGES区域找那个灰掉的文件名 - 鼠标悬停,点中间那个
Discard Changes图标(三个点 → 第二个) - 弹窗确认时选
Restore File,本质执行的是git restore --staged --worktree <file></file>
注意:git status 必须能列出该文件,否则说明它从未被 git add 过,这招无效;如果已运行过 git clean -f 或 git reset --hard,暂存区也被清空了,得换方法。
文件彻底消失,但 VSCode 还开着且曾打开保存过
这时靠 VSCode 自带的 Local History —— 它不依赖 Git,只要文件曾在编辑器中打开并保存过,就会自动存快照。
- 按
Ctrl+Shift+P输入File: Open Local History,回车 - 在列表里找原路径和文件名匹配的条目(即使磁盘上已无该文件,VSCode 仍会尝试匹配)
- 点开预览,确认内容正确后,点击右上角
Restore按钮
关键限制:Local History 默认只保留最近 30 天、每个文件最多 50 个版本;若你清空过 %APPDATA%\Code\User\History(Windows)或 ~/.vscode-server/data/User/History(远程开发),快照就没了;未保存过的临时文件(如 Untitled-1)也不会被记录。
Shift+Delete 或终端 rm -f 后文件直接不见
这不是 VSCode 的问题,而是操作系统跳过回收站的硬删除。VSCode 的 Local History 和 Git 都救不了——除非你之前已提交过或保存过。
- 立刻停止所有写盘操作(关浏览器、暂停下载、别保存任何东西)
- Windows 上用
Recuva(免费 GUI)扫描原分区;macOS/Linux 用PhotoRec(命令行,识别文件类型但不保原名) - 如果项目有 Git,先跑
git status:若显示deleted: path/to/file,说明还在暂存区,git restore --staged --worktree path/to/file仍可秒回
PhotoRec 恢复出来的文件没有原名,需手动按扩展名筛选,比如从一堆无名文件里找出 .ts 或 .py;SSD 上恢复成功率比机械盘低,因为 TRIM 会主动擦除已删区块。
为什么 Timeline 里找不到想恢复的文件
不是功能坏了,大概率是触发条件没满足。
-
files.watcherExclude设置误加了项目根目录(如"**"),VSCode 就不会监听变更,Local History 也就不记录 - 文件是新建后直接右键删除、全程没点开过,VSCode 根本没机会生成快照
- 你删的是整个文件夹,而 Timeline 是按单个文件索引的——得去父文件夹右键 →
Open Timeline,再找对应时间点的变更记录
真正容易被忽略的点是:Local History 的快照依赖于文件系统事件,而某些网络盘、WSL2 的 ext4 分区挂载方式、或远程开发容器配置不当,会导致事件监听失效——这种情况下,装一个独立的 Local History 插件(非官方但成熟)反而更稳。











