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

lui*_*sgo 49 git github git-branch

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

谢谢.

Hig*_*ife 53

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

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

如果您在过去30天内在本地git仓库中拥有分支,您可以使用以下内容在reflog中找到它:

git reflog
Run Code Online (Sandbox Code Playgroud)

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

从Reflog HEAD点重新创建分支:

git checkout -b branch_name HEAD@{27}
Run Code Online (Sandbox Code Playgroud)

从提交ID重新创建分支:

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

git checkout -b branch_name <commit id>
Run Code Online (Sandbox Code Playgroud)

  • 这不解决OP的问题.你所做的只是解释一种迂回的方式来找出你目前检查的提交(无论它是否在分支上).如果删除的远程分支未指向HEAD,则这没有帮助.如果你在某些时候检查过它们,它们可能会在reflog中更远. (19认同)
  • 这是......有点儿.这有点混乱.你真的想使用`reflog`后跟`git branch <branch-name> <commit>`.(你在那里错过了一个论点).如果由于某种奇怪的原因你不想真正获得原始分支,但只是跳过并将其合并到当前的提交中,那么是的,你可以`git checkout -b <branch-name>; git merge <commit>`.我不知道为什么那会是你的默认建议. (3认同)
  • 我错过了什么?我不认为这个答案甚至"有点"回答了这个问题.`git reflog`将显示_HEAD_的历史记录.您必须搜索已删除的`foo`分支的出现.找到"HEAD @ {0}"根本没有帮助.请参阅下面的[我的回答](http://stackoverflow.com/a/15927338/10608). (2认同)

Von*_*onC 10

可以请求GitHub支持并让他们查看reflog您的远程仓库(例如在此线程中).
如果从删除开始足够接近(每个默认值少于30天),则reflog仍然包含任何分支不再引用的提交.
在其中一个提交上创建分支允许再次访问它们.

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


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


pie*_*rsb 7

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

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

curl -u "username:PersonalAccessToken" -H "Accept: application/vnd.github.v3+json"  https://api.github.com/repos/RepoOwner/Repo/events
Run Code Online (Sandbox Code Playgroud)

在响应中找到DeleteEvent;在那里您将能够找到您删除的分支的孤立 SHA。

git fetch SHA
git switch -c name-of-your-deleted branch
Run Code Online (Sandbox Code Playgroud)

问题解决了。


Gor*_*ean 6

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

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