github是否保留历史上被删除的远程分支? 如果是的话,那些可以恢复?

我想知道是否有办法在github中恢复远程删除的分支。 历史清楚地logging了分支并与其他分支合并,但我不确定是否可以恢复已删除的分支。

谢谢。

是的,可以从git恢复已删除的分支。

find你的提交ID:使用git reflogsearch分支

如果您在过去30天内在本地git仓库中拥有分支,则可以使用以下命令在reflog中find它 :

git reflog 

在reflog中search分支名称并记下HEAD{x}点或提交ID。

从Reflog HEAD点重新创build分支:

 git checkout -b branch_name HEAD@{27} 

从提交ID重新创build分支:

您可以检出提交ID并从该提交点创build一个分支:

 git checkout -b branch_name <commit id> 

有可能要求GitHub的支持,让他们看看你的远程回购的reflog ( 例如在这个线程 )。
如果距离删除足够近(默认情况下为30天以内),则reflog仍包含任何分支不再引用的提交。
在其中一个提交上创build一个分支可以让他们再次访问。

有关reflog的更多信息,请参阅“ 什么是reflog,为什么如此重要? ”


更新: 回购所有者也可以查询GitHub EVents API
请参阅“ GitHub是否记住提交ID?

git reflog会告诉你HEAD的历史。 如果您删除的分支名为foo ,那么在该输出中,您应该看到48534f5 HEAD@{0}: checkout: moving from master to foo48534f5 HEAD@{1}: merge foo: Fast-forward 。 您可以searchgit reflog的输出来确定哪个提交必须是foo指向的最新提交。

要知道,当foo被删除时,“foo”reflog文件本身被删除,但是由于HEAD的reflog不同,它仍然存在。

看看这个python脚本的github事件。 https://github.com/jimzucker/githubutils/blob/master/githubreflog.py

我创build它来拉事件并使它们可读,您可以将它pipe入grep并查找您感兴趣的分支。如果有足够的历史logging,您将看到有关分支的删除事件,则下一行将是最后一个推动事件,那就是你感兴趣的沙。

当分支已经被删除了很长一段时间(在我的情况下是1年),但是你已经打开了一个分支的请求,你可以通过在请求历史logging中search来重新生成分支。

一旦我find该分支的请求,我可以恢复分支。 相关的提交信息等也可以从拉取请求中获得。