恢复原理
删除分支只会移除引用,不会立即删除提交。在垃圾回收清理不可达对象之前,reflog 仍记录分支最后指向的位置。重建分支即可恢复可达性。
git reflog --date=iso
# 选择曾作为分支尖端的提交
git branch recovered-feature 9a1b2c3
git switch recovered-feature
git push -u origin recovered-feature
步骤
- 用
git reflog --date=iso | head -50查找被删除分支的最后提交或可识别的提交信息。 - 用
git branch recovered-feature <commit-sha>在恢复的提交上创建新分支。 - 切换分支并确认文件与历史完整:
git switch recovered-feature && git log --oneline -5。 - 立即推送恢复的分支,使它不再只存在于 reflog 中。
验证
- 恢复的分支指向预期提交。
git log显示你期望的工作。- 分支已推送到远程,下一次误删也可恢复。
- 在恢复的分支上构建或测试通过。
如果 reflog 没有记录
使用 git fsck --lost-found 查找悬空提交,再用 git show --stat <commit> 检查内容。也可以从另一份克隆、CI 缓存或文件系统备份恢复。
限制
reflog 是本地的并且会过期(可达对象默认 90 天,HEAD 默认 30 天);从未推送的分支无法从另一台机器恢复。激进的垃圾回收可能永久删除不可达提交。预防方式是尽早推送特性分支,并优先使用会拒绝删除未合并工作的 git branch -d。