我做了一些愚蠢的事情…
- I叉子在GitHub上进行回购
- 我做了一些更改,提交把它们放在我的叉子上
- 我将此提交作为拉取请求发送回原始回购
- 愚蠢的部分来了:我删除d我的叉子
原始repo的所有者在接受pull请求之前要求对我的代码进行几次更改,我很乐意这样做。
我尝试重新分叉repo,但我无法从pull请求中签出提交,它甚至不作为"未链接"提交(一个不属于任何分支或标记的提交,我不知道官方术语)存在。
我的问题是:如何恢复作为拉取请求发送的提交?
如果没有办法,可以选择在新的提交中重新进行更改,但pull请求会丢失。我的问题不是关于不丢失提交中的更改,而是关于不丢失git历史,这意味着保留提交的SHA1(以及我可能不知道的任何其他内容)。
可以将请求fetch
拉到本地机器。
如果没有到有问题的拉取请求的链接,很难测试这是否有效,但你可以尝试
- 创建一个新的存储库分支
- 克隆你的新分叉
-
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
-
merge
将请求拉入本地存储库,例如git checkout master git merge --ff-only upstream/pr/1
-
然后
push
返回到您的新叉子。
如果失败,您可以向GitHub提交支持请求,要求他们恢复您的存储库。来自安全常见问题解答:
当用户删除存储库时,我们不会从备份中追溯删除存储库,因为如果意外删除,我们可能需要为用户恢复存储库。
要启动此过程,请尽快联系他们的支持团队。
现在最简单的方法是使用GitHub CLI。
- 创建一个新的fork,克隆它:
gh repo fork <org>/<repo>
- 在您的克隆回购中,签出PR:
gh pr checkout <num>
- 推回拨叉:
git push -u origin HEAD