Git 分支被删除后还能恢复吗

能恢复。本地分支删除后用 git reflog 找到分支最后指向的提交哈希,再 git checkout -b <分支名> <哈希> 重建。远程分支被删可从任意协作者的本地引用恢复。前提是该提交尚未被垃圾回收(默认 30 天内有效)。

最佳实践
Git 提交历史与版本恢复示意

可以恢复,而且通常不难:分支只是一个指向提交的指针,删分支不删提交。用 git reflog 找到被删分支最后指向的提交哈希,然后 git checkout -b 分支名 哈希 原地重建即可。关键是尽快操作——能否恢复取决于对象、reflog 和垃圾回收状态,不存在固定的保证恢复天数。

恢复本地分支

git reflog
# 找到类似:a1b2c3d HEAD@{2}: commit: xxx(被删分支最后的提交)

git checkout -b feature-x a1b2c3d

如果 reflog 里翻不到(隔得太久),用 fsck 找孤立提交:

git fsck --lost-found
# 看 dangling commit 列表,逐个 git show <hash> 确认
git checkout -b recovered <hash>

恢复远程分支

  • 你的本地还有引用:git push origin feature-x:refs/heads/feature-x;
  • 本地也没有:找还没 fetch --prune 的同事,他们的 origin/feature-x 引用可能还在;
  • GitHub/GitLab 上如果是通过 PR 合并的,PR 页面通常有 Restore branch 按钮。

防丢建议

  • 重要分支删之前先打个 tag:git tag archive/feature-x feature-x,tag 不会被分支删除波及;
  • 团队约定:分支删除走 PR 合并后的界面操作,留恢复入口。

常见问题(FAQ)

Q:reflog 会保留多久?

常见默认设置中,一般 reflog 条目为 90 天,不可达条目为 30 天;对象清理还受 gc.pruneExpire 等设置影响。这些值不是误删后的恢复承诺,应尽早定位并用分支引用保留提交。

Q:恢复后远程跟踪关系还在吗?

重建的本地分支需要重新关联:git push -u origin feature-x(远程还在)或先恢复远程再 git branch --set-upstream-to。

Q:git gc 之后还能恢复吗?

如果提交已被 prune,本地就彻底没了;此时寄希望于远程仓库或其他协作者的克隆。重要数据别赌这个窗口。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台