vscode local history 能恢复未提交代码,但仅当文件在当前工作区被打开、编辑并触发保存/焦点切换/停顿等快照条件,且未被排除监听或手动禁用;失效情形包括命令行覆盖、从未打开、新建即删等。

VSCode 的 Local History 能找回未提交的代码,但前提是它曾经为你那个文件生成过快照——不是所有编辑行为都会被记录,也不是删了就一定能捞回来。
Local History 什么情况下会生效
它不依赖 Git,但依赖你是否“真正用 VSCode 编辑过这个文件”。常见有效场景包括:
- 文件在当前工作区中被打开、编辑、并触发了保存/焦点切换/停顿(约 2 秒)
- files.autoSave 设为
afterDelay或onFocusChange,确保修改落盘 - 该文件没被
files.watcherExclude排除(比如整个node_modules目录默认被排除,改了也不会存历史) - 你没手动关掉
files.localHistory.enabled(默认是开的)
典型失效情况:文件是用命令行直接覆盖的(如 echo "x" > index.js)、从未在 VSCode 中打开过、或刚新建就删了还没来得及触发快照。
怎么快速打开并恢复一个文件的历史版本
最稳路径是右键资源管理器里的文件 → Open Timeline。如果菜单里没有这项,说明 VSCode 没为它存过快照。
- 时间轴里显示的是“Saved”“Auto-saved”这类标记,不是 Git commit 时间
- 滚动找昨天/几小时前的时间点,点击后右侧预览快照内容;确认无误再点 Restore
- Restore 是直接覆盖当前编辑器内容,不可撤回——建议先
Ctrl+S保存当前状态,或复制全文到临时文件 - 如果文件已关闭,Timeline 面板可能为空;此时只能去
${workspaceFolder}/.history/手动翻找,按修改时间排序,找带.js、.py后缀的原始文件
为什么 Open Timeline 没反应或找不到昨天的记录
不是功能坏了,而是快照机制有硬限制:
- 默认只保留最多 5 天,且每个文件最多存 50 个快照(受
files.localHistory.maxFileEntries控制) - 如果你昨天改完就关了 VSCode,且之后没再打开过该文件,那它的历史大概率已被清理
- Windows/macOS 系统级快照(如“以前的版本”或 Time Machine)比 Local History 更可靠,但需要提前开启
- VSCode 的
.history文件夹本身可被杀毒软件或磁盘清理工具误删,尤其在 Windows 上
别等出事才想起来检查设置
现在就花 30 秒确认这几项,能避免下次抓瞎:
- 打开设置(
Ctrl+,),搜files.localHistory.enabled→ 确保为 true - 搜
files.autoSave→ 建议设为afterDelay(默认 1s,够用) - 搜
files.watcherExclude→ 看看项目根目录是否意外被排除(比如写了**) - 搜
files.hotExit→ 设为onExitAndWindowClose,防止关窗口丢上下文
Local History 是最后一道防线,不是保险箱。它不保证每行代码都被记下,只保证“你认真编辑过、它大概率见过”。真要防丢,git add -N 或 git stash -u 还是更可控的选择。











