我想知道是否有办法在github中恢复远程删除的分支。历史清楚地记录了分支并与其他分支合并,但我不确定是否可以恢复已删除的分支。
感谢。
答案 0 :(得分:51)
是的,可以从git恢复已删除的分支。
如果您在过去30天内在当地的git repo中拥有该分支,则可以find it in the reflog使用以下内容:
git reflog
在reflog中搜索分支名称,并记下HEAD{x}
点或提交ID。
git checkout -b branch_name HEAD@{27}
您可以签出提交ID并从该提交点创建分支:
git checkout -b branch_name <commit id>
答案 1 :(得分:10)
可以请求GitHub支持并让他们查看远程仓库的{strong> reflog
(like 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 foo
或48534f5 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
问题解决了。