我想知道是否有一种方法可以在github中恢复远程删除的分支。历史记录清楚地保留了分支的记录,并与其他分支合并,但我不确定是否有可能恢复已删除的分支。谢谢.
tnkciper1#
是的,可以从git恢复已删除的分支。
如果你在过去30天内在本地git仓库中有这个分支,你可以使用以下方法find it in the reflog:
git reflog
在reflog中搜索分支名称并记下HEAD{x}点或提交ID。
HEAD{x}
git checkout -b branch_name HEAD@{27}
您可以 checkout 提交ID并从该提交点创建一个分支:
git checkout -b branch_name <commit id>
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?“
reflog
u7up0aaq3#
当分支已经被删除了很长一段时间(在我的情况下,1年),但你已经打开了该分支的拉取请求,你可以通过搜索拉取请求历史来恢复它。一旦我找到了那个分支的拉取请求,我就可以恢复那个分支。相关提交信息等。也可以从pull request中获得。
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
问题解决了
hgtggwj05#
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不同,它仍然存在。
HEAD
foo
48534f5 HEAD@{0}: checkout: moving from master to foo
48534f5 HEAD@{1}: merge foo: Fast-forward
pprl5pva6#
看看这个github事件的python脚本。https://github.com/jimzucker/githubutils/blob/master/githubreflog.py我创建它是为了拉取事件并使其具有可读性,您可以将其导入grep并查找您感兴趣的分支。如果有足够的历史记录,您将看到所讨论的分支的删除事件,下一行将是最后一个推送事件,这就是您感兴趣的SHA。
6条答案
按热度按时间tnkciper1#
是的,可以从git恢复已删除的分支。
查找提交ID:使用git reflog搜索分支
如果你在过去30天内在本地git仓库中有这个分支,你可以使用以下方法find it in the reflog:
在reflog中搜索分支名称并记下
HEAD{x}
点或提交ID。从Reflog HEAD点重新创建分支:
根据提交ID重新创建分支:
您可以 checkout 提交ID并从该提交点创建一个分支:
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?“
u7up0aaq3#
当分支已经被删除了很长一段时间(在我的情况下,1年),但你已经打开了该分支的拉取请求,你可以通过搜索拉取请求历史来恢复它。
一旦我找到了那个分支的拉取请求,我就可以恢复那个分支。相关提交信息等。也可以从pull request中获得。
eiee3dmh4#
这是一个有点逃避,但这里是如何做到这一点。
从个人资料/设置/开发人员设置/个人访问令牌中获取新的个人访问令牌(如果您还没有)。
在响应中找到DeleteEvent;在那里,您将能够找到您删除的分支的孤立SHA。
问题解决了
hgtggwj05#
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不同,它仍然存在。
pprl5pva6#
看看这个github事件的python脚本。https://github.com/jimzucker/githubutils/blob/master/githubreflog.py
我创建它是为了拉取事件并使其具有可读性,您可以将其导入grep并查找您感兴趣的分支。如果有足够的历史记录,您将看到所讨论的分支的删除事件,下一行将是最后一个推送事件,这就是您感兴趣的SHA。