vscode本地历史可恢复,但仅限当前工作区打开过的文件,按保存、聚焦切换或编辑停顿触发快照,右键→open timeline或ctrl+shift+p→timeline查看并restore;若未打开过该文件或被外部覆盖则无记录。

VSCode 自带的本地历史记录能恢复吗
VSCode 确实会自动保存本地修改历史,但默认只保留最近 5 次更改(或最多 30 天),且依赖于文件是否被 VSCode 正确跟踪(即打开过、编辑过、未被外部工具强制覆盖)。关键点是:File → Revert File 只能撤销本次会话中尚未保存的修改,对已保存的覆盖无效;而真正的“找回昨天的版本”得靠 Local History 功能。
- 这个功能默认开启,无需插件,但只对当前工作区中打开过的文件生效
- 历史快照按分钟级生成,但 VSCode 不保证每分钟都存——它在你保存(
Ctrl+S)、聚焦切换、或编辑停顿约 2 秒后触发快照 - 如果你昨天改完就关了 VSCode,且没再打开过该文件,那这个文件的本地历史大概率已被清理
右键文件 → Open Timeline 是最快入口;如果没看到该菜单项,说明 VSCode 没为这个文件生成过历史记录(常见于:文件从未在当前窗口打开过、或被命令行直接覆盖、或 files.hotExit 被设为 off)
从 VSCode Timeline 面板找昨天的版本
Timeline 面板不是 Git 日志,而是基于文件系统变更时间戳的本地快照索引。它不显示 commit message,只显示“Modified”或“Saved”+ 时间。
- 打开目标文件,在侧边栏点击
…→Timeline(或快捷键Ctrl+Shift+P→ 输入Timeline: Focus on Timeline View) - 在时间轴里滚动查找昨天的时间段(注意时区:VSCode 显示的是本地系统时间)
- 找到疑似版本后,点击右侧
Restore按钮(不是Compare with Current) - 如果点击
Restore后提示“Cannot restore — file has unsaved changes”,先Ctrl+S保存当前状态,或用Revert File清空当前编辑器内容再试
⚠️ 注意:Restore 是直接覆盖当前编辑器内容,不会新建标签页,也无法撤回该操作。建议先复制当前内容到临时文件再恢复
本地历史失效时,还能从哪挖出昨天的代码
VSCode 的本地历史只是最后防线。如果它没记录,优先检查这些更可靠的地方:
- Windows:右键文件 →
Properties → Previous Versions(仅限启用了“文件历史记录”或系统还原点) - macOS:用
Time Machine浏览该文件路径,按昨天的时间点还原 - Linux:若挂载了 btrfs/zfs 文件系统,可用
snapper list或zfs list -t snapshot查快照 - 所有平台:检查 VSCode 的备份目录(路径因系统而异):
$HOME/.config/Code/Backups(Linux/macOS)或%APPDATA%\Code\Backups(Windows),里面是按哈希命名的文件夹,可按mtime排序找最近修改的
别忽略编辑器外的痕迹:比如你昨天运行过 git add 但没 commit?试试 git fsck --lost-found;或者用 grep -r "某段特征代码" ~/.vscode/ 碰运气(部分插件如 Code Speller 会缓存文本)
为什么改完保存后还是找不回?几个关键陷阱
恢复失败往往不是功能坏了,而是触发条件没满足:
- 文件是通过
cp/mv/echo > file.js等方式被外部覆盖的——VSCode 完全感知不到,不会生成快照 - 你用的是远程开发(SSH/WSL/Container),而本地历史只存在远程机器的
~/.vscode-server目录下,本机根本没存 - 设置里关了
files.enableTrash,导致删除后无法从回收站找回;或开了files.hotExit: off,关闭窗口时直接丢弃所有未保存状态 - 文件编码异常(如 BOM 冲突)导致 VSCode 加载失败,Timeline 面板压根不显示该文件的历史
最常被忽略的一点:VSCode 的本地历史以文件为粒度,不是项目级。如果你昨天改的是 src/utils/helper.ts,但今天只打开了 src/index.ts,Timeline 面板里就不会出现前者——必须单独打开那个文件才能看到它的历史











