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

jfewjypa  于 2023-10-14  发布在  Git
关注(0)|答案(6)|浏览(183)

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

tnkciper

tnkciper1#

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

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

如果你在过去30天内在本地git仓库中有这个分支,你可以使用以下方法find it in the reflog

git reflog

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

从Reflog HEAD点重新创建分支:

git checkout -b branch_name HEAD@{27}

根据提交ID重新创建分支:

您可以 checkout 提交ID并从该提交点创建一个分支:

git checkout -b branch_name <commit id>
5hcedyr0

5hcedyr02#

可以请求GitHub支持,让他们查看您的远程存储库的**reflog**(例如在此线程中)。
如果这离删除足够近(默认情况下少于30天),reflog仍然包含不再被任何分支引用的提交。
在其中一个提交上创建一个分支可以让它们再次被访问。
有关reflog的更多信息,请参阅“what the heck is a reflog and why is it so important?
更新:repo所有者也可以查询GitHub Events API
参见“Does GitHub remember commit IDs?

u7up0aaq

u7up0aaq3#

当分支已经被删除了很长一段时间(在我的情况下,1年),但你已经打开了该分支的拉取请求,你可以通过搜索拉取请求历史来恢复它。
一旦我找到了那个分支的拉取请求,我就可以恢复那个分支。相关提交信息等。也可以从pull request中获得。

eiee3dmh

eiee3dmh4#

这是一个有点逃避,但这里是如何做到这一点。
从个人资料/设置/开发人员设置/个人访问令牌中获取新的个人访问令牌(如果您还没有)。

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

问题解决了

hgtggwj0

hgtggwj05#

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不同,它仍然存在。

pprl5pva

pprl5pva6#

看看这个github事件的python脚本。https://github.com/jimzucker/githubutils/blob/master/githubreflog.py
我创建它是为了拉取事件并使其具有可读性,您可以将其导入grep并查找您感兴趣的分支。如果有足够的历史记录,您将看到所讨论的分支的删除事件,下一行将是最后一个推送事件,这就是您感兴趣的SHA。

相关问题