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

我想知道是否有办法在github中恢复远程删除的分支。 历史记录显然保留了该分支的记录,并与其他分支合并,但是我不确定是否有可能恢复已删除的分支。

谢谢。

luisgo asked 2020-02-13T18:05:42Z
5个解决方案
53 votes

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

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

如果最近30天内您的本地git存储库中有分支,则可以使用以下命令在reflog中找到该分支:

git reflog

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

从Reflog HEAD点重新创建分支:

git checkout -b branch_name HEAD@{27}

从提交ID重新创建分支:

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

git checkout -b branch_name <commit id>
Highway of Life answered 2020-02-13T18:06:24Z
10 votes

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

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


更新:回购所有者还可以查询GitHub EVents API:
请参阅“ GitHub还记得提交ID吗?”

VonC answered 2020-02-13T18:07:06Z
3 votes

如果分支已经删除了很长时间(以我为例,为1年),但是您已经为该分支打开了请求请求,则可以通过在请求请求历史记录中进行搜索来恢复它。

找到该分支的拉取请求后,就可以还原该分支。 相关提交信息等也可以从拉取请求中获得。

Gordon Bean answered 2020-02-13T18:07:30Z
1 votes

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

一定要意识到,删除foo时会删除“ foo”引用日志文件本身,但是由于HEAD的引用日志不同,因此它仍然存在。

Alexander Bird answered 2020-02-13T18:07:55Z
1 votes

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

我创建了它来提取事件并使它们可读,您可以将其通过管道传递到grep并查找您感兴趣的分支。如果历史记录足够多,您将看到所涉及分支的delete事件,下一行将是 最后一个推送事件,这就是您感兴趣的sha。

Jim Zucker answered 2020-02-13T18:08:21Z
translate from https://stackoverflow.com:/questions/4674226/does-github-keep-deleted-remote-branches-in-history-if-so-can-those-be-restore