vscode文件误删后应按优先级恢复:先查源码管理面板中deleted文件并restore;若未被git跟踪,则用local history恢复快照;git已提交的文件可用git restore或git checkout;最后才考虑系统级工具如ext4magic。

刚删完就发现错了:用 VSCode 自带的撤销和源码管理恢复
如果文件还在编辑器里打开着,或者刚删完几秒内没关窗口,VSCode 有最轻量的补救方式。不是所有删除都能靠 Ctrl+Z 撤回——它只对“编辑器内未保存的修改”有效;但如果你只是在资源管理器里右键删了文件,Ctrl+Z 基本无效。
- 立刻打开左侧源代码管理面板(快捷键
Ctrl+Shift+G),看CHANGES区域是否列出该文件,并标为Deleted - 如果有,把鼠标悬停在文件名上,点中间那个图标(Discard Changes),弹出提示后选
Restore File - 这个操作本质是执行
git restore --staged --worktree <file></file>,前提是项目已初始化 Git 且文件曾被跟踪过 - 如果文件从未
git add过,这里不会出现——别在这儿浪费时间找
文件没进 Git 或已被 git clean -f 清掉:靠 Local History 快照
VSCode 的 Local History 是个隐藏但极实用的功能,不依赖 Git,只要文件曾在编辑器中打开并保存过,它就会自动存快照。但它不会永远留着——默认只保留最近 30 天、每个文件最多 50 个版本,且一旦你清空了 ~/.vscode 或重装插件,这些快照就丢了。
- 在资源管理器中右键目标文件(注意:必须是**原路径下还存在的同名文件**,哪怕内容为空),选
Open Timeline - 右侧时间线里找带
Saved或Auto-saved标签的条目,点击预览,确认内容正确后点右上角Restore - 如果文件本身已从磁盘消失(连空文件都没了),直接按
Ctrl+Shift+P,输入File: Open Local History,从列表里选它——VSCode 会尝试匹配路径和文件名来加载历史快照 - 注意:
Files: Watcher Exclude设置若误加了项目根目录,Local History 就不会记录任何变更
Git 已提交过,但删的是最新版:用 git checkout 或 git restore
这是最可靠的方式,但新手常卡在命令选错或路径写错。关键判断点只有一个:你想恢复的文件,在 Git 历史里是否存在?如果它曾经被 git add 并 git commit 过,那它就在那里,随时可取。
- 终端里运行
git log --oneline -- <file-path></file-path>,看有没有输出。没有?说明 Git 从没管过这文件,跳过此法 - 有输出,就复制最上面那行的 commit ID(比如
a1b2c3d),执行git checkout a1b2c3d -- <file-path></file-path> - 更现代写法是
git restore --source=HEAD --worktree <file-path></file-path>,效果一样,但语义更清晰 - 如果删完还顺手
git commit了删除操作,就得先git reset HEAD~1把这次“删文件”的提交撤掉,再恢复——顺序不能反
回收站清空 + Git 没跟踪 + Local History 失效:只剩系统级抢救
这种情况极少,但真遇到就是硬仗。核心逻辑只有一条:只要文件占用的磁盘块还没被覆盖,就有机会捞回来。Linux 下比 Windows 更有机会,因为 ext4 文件系统删文件只是标记 inode 为可用,不立即擦除数据。
- 立刻停止向该分区写入:别保存新文件、别编译、别开大应用;临时把
/tmp指向别的分区(export TMPDIR=/other/mount/tmp) - 用
lsof | grep deleted查看是否还有进程正打开着这个文件——如果显示某 PID 占着它,直接从/proc/<pid>/fd/<fd-num></fd-num></pid>复制出来,一模一样 - 否则,用
ext4magic(ext4)或photorec(通用)扫描分区。注意:必须在**同一台机器**上操作,不能挂载为只读再拷走镜像——延迟一秒都可能让数据被覆盖 - VSCode 缓存路径如
~/.vscode-server/data/User/History有时能挖出文本碎片,但别抱太大希望;它不存完整二进制,只存编辑器见过的纯文本快照
真正难的不是方法多,而是反应速度和判断优先级:先看 Git 状态,再查 Local History,最后才碰系统层工具。等你打开 recovery 软件时,可能已经晚了三分钟。










