能恢复,关键看删的是什么、怎么删的、删完有没有执行过 git gc 或 git reset --hard 这类清理动作。VSCode 和 Visual Studio 的 Git 界面操作本质都是调用底层 Git 命令,恢复路径高度一致。

能恢复,关键看删的是什么、怎么删的、删完有没有执行过 git gc 或 git reset --hard 这类清理动作。VSCode 和 Visual Studio 的 Git 界面操作本质都是调用底层 Git 命令,恢复路径高度一致。
刚在 VS 中点右键删了文件,还没提交?直接 Restore
VS(2022+)源代码管理面板里,“CHANGES” 区域会立刻显示灰显文件 + 删除图标。这不是真删,只是标记为 deleted 状态。
- 打开“团队资源管理器” → 左侧点“更改” → 找到那个灰掉的文件名
- 鼠标悬停 → 点中间的 Discard Changes 图标(垃圾桶带箭头)→ 选 “Restore File”
- 等效命令是
git restore --staged --worktree path/to/file,秒级还原,内容和删之前一模一样 - ⚠️ 前提:该文件必须已被 Git 跟踪过(即之前
git add或提交过)。新建未提交的临时文件不会出现在这里
删完还点了“重置并删除更改(--hard)”?立刻用 reflog
git reset --hard 会清空工作区和暂存区,但只要没触发 git gc,最后一次提交哈希还在 reflog 里。
- 在项目根目录打开终端(或 VS 的“Git”菜单 → “打开命令行”),立刻运行:
git reflog - 找你删之前 HEAD 所在的那行,例如:
abc1234 HEAD@{2}: reset: moving to abc1234,说明abc1234就是删掉前的最新提交 - 执行:
git reset --hard abc1234,一步回滚到删之前的状态 - ⚠️ 别等——频繁
rebase或filter-branch后,git gc可能提前清理“不可达”对象,reflog 记录也会被压缩
文件从资源管理器里彻底消失了,且没被 Git 跟踪?查 Timeline 或本地历史
VSCode 的 Timeline 和 VS 的 Local History 是独立于 Git 的磁盘快照,对未提交/未跟踪文件最管用。
- VSCode:右键该文件 → “Reveal in Timeline”,或
Ctrl+Shift+P→ 输入 “Open Timeline”。时间戳越靠后,越可能含删前内容;先点 “Compare with Current” 看差异,再决定是否 “Restore” - Visual Studio:右键文件 → “Source Control” → “View History”,但注意——这仅对已提交文件有效;若文件从未进过 Git,得靠系统回收站(Windows 回收站 / macOS 废纸篓)或
git fsck --lost-found扫游离提交 - ⚠️ Timeline 不显示?说明是 Untitled-1 这类纯内存临时文件,只能靠
File: Recover Unsaved Changes(VSCode)或外部备份
reflog 空了、Timeline 没记录、Git 也没跟踪?试试 fsck 扫 dangling commit
当 reflog 被清空或记录不全时,Git 对象库里可能还躺着“没人引用”的提交。
- 运行:
git fsck --lost-found,输出类似:dangling commit def5678 - 对每个哈希执行:
git log --oneline -n 5 def5678,看作者、时间、提交信息,判断是否属于你丢的分支 - 确认后:
git branch recover-branch def5678→git switch recover-branch - ⚠️ 这招成本高、成功率低,只建议在 reflog 失效且无其他备份时兜底;日常应养成
git add -A && git commit -m "wip"频繁存档的习惯
真正容易被忽略的点:VS 的 Git 界面不显示 reflog,也不暴露 fsck;所有恢复动作都得切到命令行。别指望点几下鼠标就能捞回 --hard 掉的代码——那不是 UI 缺陷,是 Git 设计使然。


















