只要你add.也就是你提交暂存更改,git就会留下操作记录git给你的代码留下快照,那么你就能通过git命令帮你找回来你丢失的代码
文件被
git reset取消暂存,且工作区文件可能被误删 / 覆盖,但 Git 仍保留着这些文件的 "暂存记录",可以通过 Git 底层对象恢复。以下是针对性的恢复步骤,分 "快速找回" 和 "深度恢复" 两种方案,确保能找回所有丢失的代码
用 git reflog 恢复最近的修改(100% 覆盖你丢失的代码)
- 查看所有 Git 操作历史 (包括
add/reset/commit,能看到你之前的修改记录):
bash
用 git reflog 恢复最近的修改(100% 覆盖你丢失的代码)

输出示例(重点看时间和操作,找 实际操作的时间例如 17:33 左右的记录):
plaintext
d02c1bc (HEAD) HEAD@{0}: reset: ...
abc1234 HEAD@{1}: add: .eslintrc-auto-import.json ... # 你执行 git add 的记录
def4567 HEAD@{2}: commit: xxx

-
查看备份内容(确认备份包含你的修改):
bash# 查看 stash 备份的详细信息(确认是你丢失的文件) git stash show -p XXXXX- 执行后会输出备份中的所有文件修改内容,你会看到
xxx.vue、xxx.ts等文件的代码,说明备份有效。
- 执行后会输出备份中的所有文件修改内容,你会看到
这里会出现显示不完全的情况,没找到你的文件不要慌张,从
git stash show输出看,当前显示的只是部分 的修改,不是完整的备份内容 (因为输出被截断了,末尾有:...skipping...)。你的核心代码(xxx.vue、xxx.ts等)其实还在这个 stash 备份里,只是没显示全!
- 现在直接执行:恢复完整的 stash 备份(不用管部分显示)
不用纠结显示的内容,直接应用整个 stash 备份,所有文件都会恢复:
bash
# 强制应用 stash 备份,覆盖当前工作区(确保所有修改都回来)
git stash pop xxxxxx
备用方案
-
打开 Git Bash(在项目文件夹空白处右键 → Git Bash Here,直接进入项目根目录);
-
把脚本 逐行复制粘贴到 Git Bash 中,按回车执行(不需要保存为文件,直接粘贴运行):
bashmkdir -p ./recovered_files cd .git/objects || exit for dir in [0-9a-f][0-9a-f]; do for file in "$dir"/*; do if [ -f "$file" ]; then hash="$dir${file#$dir/}" type=$(git cat-file -t "$hash" 2>/dev/null) if [ "$type" = "blob" ]; then git cat-file -p "$hash" > "../../recovered_files/$hash" if git cat-file -p "$hash" 2>/dev/null | grep -q "<template"; then mv "../../recovered_files/$hash" "../../recovered_files/$hash.vue" elif git cat-file -p "$hash" 2>/dev/null | grep -q "export default"; then mv "../../recovered_files/$hash" "../../recovered_files/$hash.ts" elif git cat-file -p "$hash" 2>/dev/null | grep -q "{""; then mv "../../recovered_files/$hash" "../../recovered_files/$hash.json" fi fi fi done done cd ../.. || exit echo "所有文件快照已导出到 ./recovered_files 目录" -
执行后,会在项目根目录生成
recovered_files文件夹,里面就是所有 Git 缓存的文件快照。
- 行后,打开
./recovered_files目录,里面会有所有 Git 缓存的文件快照; - 按文件类型(
.vue、.ts)筛选,找到你丢失的文件(如xxx.vue、xxxx.ts),复制回项目对应的目录即可。
2. 精准筛选丢失的文件
如果 recovered_files 文件太多,用关键词搜索快速定位:
bash
# 搜索包含 "xxxxx" 关键词的文件(Vue 组件)
grep -r "xxxxxx" ./recovered_files --include="*.vue"
# 搜索包含 "xxxx" 关键词的文件(TS 接口/API)
grep -r "xxxxxx" ./recovered_files --include="*.ts"
# 搜索包含 "xxxxxxxx" json文件
grep -r "xxxxxx" ./recovered_files --include="*.json"
- 找到后,复制文件到项目原路径,代码直接恢复。
四、为什么文件会 "不在暂存区"?(日志复盘)
从日志看,你在 git add 后执行了多次 git reset 命令,导致部分文件被取消暂存:
- 这些
reset操作仅取消 "暂存状态",但默认不会删除工作区文件。如果工作区文件也丢了,可能是后续误删或 IDE 同步问题,但 Git 缓存的快照还在,通过上面的方案能恢复。