【问题标题】:Recover a commit sent as a pull-request from a deleted fork on GitHub从 GitHub 上已删除的分叉中恢复作为拉取请求发送的提交
【发布时间】:2014-01-25 11:36:51
【问题描述】:

我做了件蠢事……

  1. fork在 GitHub 上创建了一个 repo。
  2. 我做了一些更改,提交在我的 fork 上。
  3. 我将此提交作为 pull-request 发送回原始存储库。
  4. 愚蠢的部分来了:我删除了我的叉子。

原始仓库的所有者在接受拉取请求之前要求对我的代码进行一些更改,我很乐意这样做。

我尝试重新分叉存储库,但我无法从拉取请求中签出提交,它甚至不存在作为 “未链接”提交(不属于任何分支或标签的提交,我不知道官方术语)

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

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

【问题讨论】:

  • 那么您是否在网站上进行了正确的更改而没有在 git 中克隆任何内容?如果您确实克隆了您的 fork,您是否已经在您的计算机上删除了该克隆?
  • 我确实在我的电脑上克隆了它,但我也把它删除了。

标签: git github


【解决方案1】:

可以fetch pull requests to your local machine

如果没有指向相关拉取请求的链接,很难测试这是否可行,但您可以尝试

  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 提交支持请求,要求他们恢复您的存储库。来自FAQ about security

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

要启动此过程,请尽快contact their support team

【讨论】:

  • @Chris:感谢您的回答。以下链接也对我有所帮助。对于上面提到的第 3 点:stackoverflow.com/questions/6743514/…stackoverflow.com/questions/2643502/…
  • @Chris,这是纯金!但是,我不确定如何在现有拉取请求之上添加新提交,而无需创建新提交。在这种情况下,推送到新的分支不会按预期工作,因为旧的拉取请求来自未知存储库(已删除的分支)。任何提示表示赞赏
  • @apppoll,我不认为你可以更新旧的 PR。你必须创建一个新的。 documentation for Modifying an inactive pull request locally 包括切换到新分支、将该新分支推送到 GitHub 以及创建新 PR 的步骤。此外,“远程refs/pull/ 命名空间是只读”,因此您不能只推回PR ref 本身。
  • @Chris,有点道理。只是想知道我是否遗漏了一些明显的东西。谢谢!
  • 我试过这些,git 也能够获取所有的 PR,这很好。但在第四步(git merge --ff-only upstream/pr/230)它返回“致命:无法快进,中止。”
猜你喜欢
  • 2019-05-07
  • 2018-11-27
  • 2013-08-21
  • 1970-01-01
  • 2011-04-21
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多