恢复从GitHub上已删除的分叉以拉取请求形式发送的提交



我做了一些愚蠢的事情…

  1. I叉子­在GitHub上进行回购
  2. 我做了一些更改,提交­把它们放在我的叉子上
  3. 我将此提交作为拉取请求发送回原始回购
  4. 愚蠢的部分来了:我删除­d我的叉子

原始repo的所有者在接受pull请求之前要求对我的代码进行几次更改,我很乐意这样做。

我尝试重新分叉repo,但我无法从pull请求中签出提交,它甚至不作为"未链接"提交(一个不属于任何分支或标记的提交,我不知道官方术语)存在。

我的问题是:如何恢复作为拉取请求发送的提交

如果没有办法,可以选择在新的提交中重新进行更改,但pull请求会丢失。我的问题不是关于不丢失提交中的更改,而是关于不丢失git历史,这意味着保留提交的SHA1(以及我可能不知道的任何其他内容)。

可以将请求fetch拉到本地机器。

如果没有到有问题的拉取请求的链接,很难测试这是否有效,但你可以尝试

  1. 创建一个新的存储库分支
  2. 克隆你的新分叉
  3. fetch您来自上游存储库的拉取请求

    git remote add upstream https://github.com/User/repository.git
    $EDITOR .git/config
    # Add `fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*` to
    # the relevant section, as outlined in the linked page. Note that
    # we use `upstream` instead of `origin` as the target.
    git fetch upstream
    
  4. merge将请求拉入本地存储库,例如

    git checkout master
    git merge --ff-only upstream/pr/1
    
  5. 然后push返回到您的新叉子。

如果失败,您可以向GitHub提交支持请求,要求他们恢复您的存储库。来自安全常见问题解答:

当用户删除存储库时,我们不会从备份中追溯删除存储库,因为如果意外删除,我们可能需要为用户恢复存储库。

要启动此过程,请尽快联系他们的支持团队。

现在最简单的方法是使用GitHub CLI。

  1. 创建一个新的fork,克隆它:
    gh repo fork <org>/<repo>
    
  2. 在您的克隆回购中,签出PR:
    gh pr checkout <num>
    
  3. 推回拨叉:
    git push -u origin HEAD
    

最新更新