是,未 git add 的代码仍在硬盘上;因 Git 未跟踪,其内容通常残留于文件系统未覆盖区域,VSCode 的 Local History(默认开启)或 .git/lost-found 中的悬空 blob 是主要恢复途径。

Git reset --hard 后,未 git add 的代码还在硬盘上吗?
不在 Git 的任何引用里,但大概率没被真正删除——只要没被新文件覆盖、没清空回收站、没用 shred 或磁盘擦除工具,原始文件内容通常还躺在工作目录的文件系统缓存或未覆盖扇区中。VSCode 本身不保存副本,但它可能触发过自动备份(比如本地历史、文件恢复提示),这是唯一能快速捞回的“活口”。
立刻检查 VSCode 的 Local History 功能是否生效
VSCode 内置的 Local History 默认开启(除非被手动关掉或禁用扩展),它会基于文件修改时间戳,在 .history 文件夹里存每小时/每天的快照,和 Git 无关。这是误删后最常奏效的路径。
- 右键编辑中的文件 → 点击
Open Local History,看是否有可恢复的时间点 - 如果没反应,检查设置:
files.enableTrash必须为true(否则删文件直接绕过回收站);files.hotExit建议设为onExitAndWindowClose,避免意外关闭丢上下文 - 历史记录默认存 5 天,路径在
${workspaceFolder}/.history/,可直接进这个文件夹按时间找.js、.py等原始后缀的备份文件
用 git fsck --lost-found 找已暂存但未提交的 blob
如果代码曾执行过 git add(哪怕没 commit),Git 就已把内容存为 blob 对象,reset --hard 不会清理这些“悬空对象”。git fsck 能扫描并恢复它们,但需要手动比对内容。
- 运行
git fsck --lost-found,输出类似Checking object directories: 100% (256/256), done.,然后去.git/lost-found/other/看一堆无名 hash 文件 - 用
git show <hash>查看每个 blob 内容,匹配你记得的变量名、函数名或注释片段(比如git show a1b2c3d | head -n 5) - 注意:这些 blob 没有文件名,只能靠内容识别;如果项目大、改动多,容易漏掉或混淆
别依赖回收站,也别信“Git 什么都记着”
Windows/macOS 回收站只管 rm 或图形界面删除,git clean -fd 或 reset --hard 后手动删文件,若 files.enableTrash 关了,就是真删。Git 本身从不备份未 add 的内容——它连看都没看过那些文件。
真正该养成的习惯是:改关键逻辑前顺手 git add -N .(通知 Git 有新文件)、或用 git stash -u 存下所有未跟踪文件;VSCode 设置里打开 files.autoSave 设为 afterDelay,至少保个几秒内的最后状态。


















