github会在历史记录中保留已删除的远程分支吗?如果是这样,那些可以恢复吗?

时间:2011-01-12 21:25:42

标签: git github git-branch

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

感谢。

6 个答案:

答案 0 :(得分:51)

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

找到您的提交ID:使用git reflog搜索分支

如果您在过去30天内在当地的git repo中拥有该分支,则可以find it in the reflog使用以下内容:

git reflog

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

从Reflog HEAD点重新创建分支:

git checkout -b branch_name HEAD@{27}

从提交ID重新创建分支:

您可以签出提交ID并从该提交点创建分支:

git checkout -b branch_name <commit id>

答案 1 :(得分:10)

可以请求GitHub支持并让他们查看远程仓库的{strong> refloglike in this thread for example)。
如果删除时距离足够近(每个默认值少于30天),则reflog仍然包含任何分支不再引用的提交。
在其中一个提交上创建分支允许再次访问它们。

有关reflog的更多信息,请参阅“what the heck is a reflog and why is it so important?


更新:回购所有者也可以查询GitHub EVents API
请参阅“Does GitHub remember commit IDs?

答案 2 :(得分:2)

当分支被删除了很长时间(在我的情况下,1年),但是你已经打开了对该分支的拉取请求,你可以通过搜索拉取请求历史来复活它。

一旦我找到了该分支的pull请求,我就可以恢复分支。拉取请求也可以获得相关的提交信息等。

答案 3 :(得分:1)

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

请注意,删除foo时会删除“foo”reflog文件本身,但由于HEAD的reflog不同,它仍然存在。

答案 4 :(得分:1)

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

我创建了它来拉动事件并使它们可读,你可以将它传递给grep并查找你感兴趣的分支。如果有足够的历史记录,你会看到有问题的分支的删除事件,下一个line将是最后一次推送活动,这就是你感兴趣的。

答案 5 :(得分:0)

这有点绕,但这是如何做到的。

如果您还没有,请从个人资料/设置/开发人员设置/个人访问令牌中获取一个新的个人访问令牌。

curl -u "username:PersonalAccessToken" -H "Accept: application/vnd.github.v3+json"  https://api.github.com/repos/RepoOwner/Repo/events

在响应中找到DeleteEvent;在那里您将能够找到您删除的分支的孤立 SHA。

git fetch SHA
git switch -c name-of-your-deleted branch

问题解决了。