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 Cherry-Pick
git
星渊澈1 天前
从github上git clone 比较慢,如何解决。。
git·github
魔都吴所谓1 天前
【Ubuntu】离线环境下Git LFS(deb包)安装与验证完整教程
linux·git·ubuntu
REDcker1 天前
Git worktree:多工作区并行开发与实践
git·worktree
lifewange1 天前
Git版本管理
大数据·git·elasticsearch
尘世壹俗人1 天前
idea提交git版本由于中文文件名卡死不动
java·git·intellij-idea
oushaojun22 天前
git在项目中常用的操作集合
git
qq_396227952 天前
Git 分布式版本控制
分布式·git
无限进步_2 天前
【C++】反转字符串的进阶技巧:每隔k个字符反转k个
java·开发语言·c++·git·算法·github·visual studio
Rabbit_QL2 天前
【Git 报错处理】`remote origin already exists` 是什么意思?
git