由于本人在开发的时候删除了分支,花费了一天的时间才将代码恢复,故此整理了如果误删Git代码后的恢复方法
git reflog | grep -i 'delete.*branch'
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
git checkout feature/payment
git log --oneline -3 # 检查历史记录
git ls-remote origin
git branch feature/payment a1b2c3d
git push origin feature/payment
git fsck --full --no-reflogs --unreachable --lost-found | grep commit
cd .git/lost-found/commit
cat * | less # 查看提交内容
git branch recovered-feature <提交ID>
找回已删除的未提交更改
恢复未暂存的修改
find .git -name '*.gz' -exec ls -l {} \;
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
0
恢复已暂存但未提交的更改
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
1
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
2
恢复后的验证步骤
运行 git show <分支名> 确认内容完整
检查关键文件是否存在:git ls-tree -r <分支名> | grep 文件名
运行测试:npm test 或项目特定测试
比对历史记录:git log --graph --oneline --decorate --all
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
3
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
4
chmod +x .git/hooks/pre-delete
🧪 最佳实践:使用自动化备份
git branch <分支名> <提交ID> # 创建新分支指向旧位置
git branch feature/payment e5f43d0
5
Git 删除恢复成功率统计
情况 恢复成功率 时间窗口
刚删除(有 reflog) 98% 30天内
有远程追踪分支 95% 无期限
未推送分支+reflog过期 60% 取决于GC设置
未提交的更改 <30% 极小
紧急提示:误删后立即停止操作!每次提交都会减少恢复成功率
通过上述方法,大多数误删都能有效恢复。关键操作流程:检查 reflog → 验证远程状态 → 尝试 fsck → 设置防护避免再次发生。