普通视图

发现新文章,点击刷新页面。
今天 — 2025年12月6日首页

git提交代码失败?本地代码被清空了?git代码丢了怎么办?三步帮你找回来

2025年12月4日 09:21

只要你add.也就是你提交暂存更改,git就会留下操作记录git给你的代码留下快照,那么你就能通过git命令帮你找回来你丢失的代码

文件被 git reset 取消暂存,且工作区文件可能被误删 / 覆盖,但 Git 仍保留着这些文件的 “暂存记录”,可以通过 Git 底层对象恢复。以下是针对性的恢复步骤,分 “快速找回” 和 “深度恢复” 两种方案,确保能找回所有丢失的代码

用 git reflog 恢复最近的修改(100% 覆盖你丢失的代码)

  1. 查看所有 Git 操作历史(包括 add/reset/commit,能看到你之前的修改记录):
用 git reflog 恢复最近的修改(100% 覆盖你丢失的代码)

image.png

输出示例(重点看时间和操作,找 实际操作的时间例如 17:33 左右的记录):

d02c1bc (HEAD) HEAD@{0}: reset: ...
abc1234 HEAD@{1}: add: .eslintrc-auto-import.json ...  # 你执行 git add 的记录
def4567 HEAD@{2}: commit: xxx

image.png

  1. 查看备份内容(确认备份包含你的修改):

    # 查看 stash 备份的详细信息(确认是你丢失的文件)
    git stash show -p XXXXX
    
    • 执行后会输出备份中的所有文件修改内容,你会看到 xxx.vuexxx.ts 等文件的代码,说明备份有效。

这里会出现显示不完全的情况,没找到你的文件不要慌张,从 git stash show 输出看,当前显示的只是部分的修改,不是完整的备份内容(因为输出被截断了,末尾有 :...skipping...)。你的核心代码(xxx.vuexxx.ts 等)其实还在这个 stash 备份里,只是没显示全!

  1. 现在直接执行:恢复完整的 stash 备份(不用管部分显示)

不用纠结显示的内容,直接应用整个 stash 备份,所有文件都会恢复:

# 强制应用 stash 备份,覆盖当前工作区(确保所有修改都回来)
git stash pop xxxxxx

备用方案

  1. 打开 Git Bash(在项目文件夹空白处右键 → Git Bash Here,直接进入项目根目录);

  2. 把脚本 逐行复制粘贴到 Git Bash 中,按回车执行(不需要保存为文件,直接粘贴运行):

    mkdir -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 目录"
    
  3. 执行后,会在项目根目录生成 recovered_files 文件夹,里面就是所有 Git 缓存的文件快照。

  • 行后,打开 ./recovered_files 目录,里面会有所有 Git 缓存的文件快照;
  • 按文件类型(.vue.ts)筛选,找到你丢失的文件(如 xxx.vuexxxx.ts),复制回项目对应的目录即可。

2. 精准筛选丢失的文件

如果 recovered_files 文件太多,用关键词搜索快速定位:

# 搜索包含 "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 缓存的快照还在,通过上面的方案能恢复。
❌
❌