61

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

谢谢。

4

6 回答 6

69

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

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

如果您在过去 30 天内在本地 git 存储库中有分支,则可以使用以下命令在 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>
于 2011-01-12T22:09:28.943 回答
13

可以请求 GitHub 支持并让他们查看reflog您的远程存储库(例如在此线程中)。
如果距离删除足够近(默认情况下少于 30 天),则 reflog 仍包含任何分支不再引用的提交。
在其中一个提交上创建分支允许它们再次被访问。

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


更新:repo 所有者还可以查询 GitHub EVents API
请参阅“ GitHub 是否记得提交 ID?

于 2011-01-12T22:00:18.830 回答
6

当分支已被删除很长时间(在我的情况下为 1 年),但您为该分支打开了拉取请求时,您可以通过在拉取请求历史记录中搜索来恢复它。

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

于 2017-10-12T22:32:42.737 回答
1

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

请意识到,当 foo 被删除时,“foo”引用日志文件本身也被删除,但由于 HEAD 的引用日志不同,它仍然存在。

于 2013-04-10T13:32:50.250 回答
1

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

我创建它是为了拉取事件并使其可读,您可以将其输入到 grep 并查找您感兴趣的分支。如果有足够的历史记录,您将看到相关分支的删除事件,下一行将是最后一个推送事件,这就是您感兴趣的 sha。

于 2016-03-15T03:29:50.893 回答
1

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

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

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

问题解决了。

于 2021-02-16T17:57:55.503 回答