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 缓存的快照还在,通过上面的方案能恢复。
相关推荐
摇滚侠1 小时前
零基础小白自学 Git_Github 教程,Git 命令行操作3,笔记20
笔记·git·github
摇滚侠2 小时前
零基础小白自学 Git_Github 教程,GitLFS ,笔记21
笔记·git·github
lpfasd1232 小时前
Git之外的新选择?PlasticSCM深度对比与平台支持全解析
git
Cx330❀2 小时前
Git 入门指南:从 0 到 1 掌握版本控制
git·ubuntu·gitee·centos·github
爱凤的小光2 小时前
Git自我学习笔记
笔记·git·学习
江米小枣tonylua2 小时前
从神州22极限救援,看懂Git高级玩法
git
Violet_YSWY12 小时前
git stash和backup一样吗
git
Crystal32817 小时前
Git 基础:生成版本、撤消操作、版本重置、忽略文件
前端·git·github
系夏普20 小时前
Git 版本库(Ubuntu 环境)
git