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

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

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

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

恢复本地分支

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

git checkout -b feature-x a1b2c3d

删除分支时,该分支自己的 reflog 也可能被删除;这里先查仍存在的 HEAD reflog。若找不到,可用 fsck 查不可达提交:

git fsck --no-reflogs --unreachable
# 看 unreachable 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/MR 页面恢复取决于托管平台、权限及合并状态,不保证存在恢复按钮。

防丢建议

  • 重要分支删之前先打个 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,本地就彻底没了;此时寄希望于远程仓库或其他协作者的克隆。重要数据别赌这个窗口。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台