如何在git/GITHUB中获取所有已删除的未合并分支列表?
Git恢复未留存名称的已删除分支方案
你之前参考的查询删除分支名的方案仅适用于该分支的提交已经合并到其他存活分支的场景,如果该分支从未被合并就被删除,Git日志中不会留存对应的分支名记录,可通过以下方式找回:
方法1:通过悬空提交找回(适用于未执行过git gc清理的场景)
- 执行
git fsck --lost-found命令,扫描所有未被任何分支、标签引用的悬空提交,也就是删除分支后残留的提交记录 - 扫描到的悬空commit哈希会被存到
.git/lost-found/commit/目录下,你可以根据你记得的提交信息、提交时间、代码内容逐个排查:- 查看单个提交的详情:
git show <commit哈希值> - 记得提交关键词时可以全局搜索:
git log --all --grep="你记得的提交内容关键词"
- 查看单个提交的详情:
- 定位到目标提交后,直接基于该提交重建分支即可:
git checkout -b <新分支名> <目标commit哈希值>
方法2:通过reflog操作记录找回(适用于分支删除时间不超过90天的场景)
Git本地默认会留存90天的操作记录,你可以直接查询所有HEAD移动记录定位目标分支的最后提交:
- 执行
git reflog,列出所有本地提交、切换分支、删除分支的操作记录,找到你在目标分支上的最后操作对应的哈希值 - 执行重建分支命令恢复即可:
git checkout -b <新分支名> <找到的哈希值>
特殊情况说明
如果执行上述命令都没有找到目标提交,大概率是你之前执行过
git gc命令清理了悬空对象,本地仓库无法恢复,可尝试查找远程仓库、其他同事的本地仓库是否留存该分支的副本。
内容的提问来源于stack exchange,提问作者Peter Mølgaard Pallesen
相关产品推荐
相关产品推荐

