Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

git - Recover a commit sent as a pull-request from a deleted fork on GitHub

I did something stupid…

  1. I fork­ed a repo on GitHub.
  2. I made some changes, commit­ted them on my fork.
  3. I sent this commit as a pull-request back to the original repo.
  4. Here comes the stupid part: I delete­d my fork.

The owner of the original repo requested a couple changes in my code before he could accept the pull-request, which I'd gladly do.

I tried re-forking the repo, but I can't checkout the commit from the pull-request, it's not even there as an "unlinked" commit (a commit that is not part of any branch or tag, I don't know the official terminology).

My question is: How can I recover the commit sent as a pull-request ?

If there's no way, re-doing the changes in a new commit is an option, but the pull-request would be lost. My question is not about not losing the changes from the commit, it's about not losing the git history, meaning keeping the commit's SHA1 (and anything else I might not be aware of).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It is possible to fetch pull requests to your local machine.

Without having a link to the pull request in question it's hard to test whether this will work, but you can try to

  1. create a new fork of the repository,
  2. clone your new fork,
  3. fetch your pull request from the upstream repository,

    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 the pull request into your local repository, e.g.

    git checkout master
    git merge --ff-only upstream/pr/1
    
  5. and then push it back to your new fork.

If that fails, you can submit a support request to GitHub asking them to restore your repository. From an FAQ about security:

We do not retroactively remove repositories from backups when deleted by the user, as we may need to restore the repository for the user if it was removed accidentally.

To initiate this process, contact their support team as soon as possible.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...