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 foo
或48534f5 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该分支的请求,我可以恢复分支。 相关的提交信息等也可以从拉取请求中获得。