← 中文资源

简体中文版本

恢复已删除的 Git 分支

通过 reflog 找到被删除分支的最后一个提交,在垃圾回收前重建分支;若 reflog 不可用,再检查悬空提交与其他备份来源。

阅读英文原文

恢复原理

删除分支只会移除引用,不会立即删除提交。在垃圾回收清理不可达对象之前,reflog 仍记录分支最后指向的位置。重建分支即可恢复可达性。

git reflog --date=iso
# 选择曾作为分支尖端的提交
git branch recovered-feature 9a1b2c3
git switch recovered-feature
git push -u origin recovered-feature

步骤

  1. 用 git reflog --date=iso | head -50 查找被删除分支的最后提交或可识别的提交信息。
  2. 用 git branch recovered-feature <commit-sha> 在恢复的提交上创建新分支。
  3. 切换分支并确认文件与历史完整:git switch recovered-feature && git log --oneline -5。
  4. 立即推送恢复的分支,使它不再只存在于 reflog 中。

验证

  • 恢复的分支指向预期提交。
  • git log 显示你期望的工作。
  • 分支已推送到远程,下一次误删也可恢复。
  • 在恢复的分支上构建或测试通过。

如果 reflog 没有记录

使用 git fsck --lost-found 查找悬空提交,再用 git show --stat <commit> 检查内容。也可以从另一份克隆、CI 缓存或文件系统备份恢复。

限制

reflog 是本地的并且会过期(可达对象默认 90 天,HEAD 默认 30 天);从未推送的分支无法从另一台机器恢复。激进的垃圾回收可能永久删除不可达提交。预防方式是尽早推送特性分支,并优先使用会拒绝删除未合并工作的 git branch -d。