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

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

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

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

  1. 查看所有 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
  1. 查看备份内容(确认备份包含你的修改):

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

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

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

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

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

备用方案

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

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

    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 文件太多,用关键词搜索快速定位:

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 缓存的快照还在,通过上面的方案能恢复。
相关推荐
城东11 小时前
Git使用[远程仓库远端的head比本地和提交的head旧,其他人拉不到最新代码]
git·head·远程仓库远端·比本地和提交的head旧·其他人拉不到最新代码
何中应20 小时前
使用SSH地址拉取远程仓库代码报下面的错误
git
何中应20 小时前
Git本地仓库命令补充
git
sun0077001 天前
执行repo sync -c -d -j4以后,提交未git push的代码看不到了。要怎么恢复?
git
胖虎11 天前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
春日见1 天前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
stevenzqzq2 天前
git 常用操作
大数据·git
Curvatureflight2 天前
Git工作流最佳实践:从混乱到优雅
git
wu~9702 天前
GitHub永不遗忘,使用git push -f来覆盖的提交依旧保留
git·github
Vermouth_002 天前
git clone的时候提示access denied
git