Send a pull request on GitHub for only latest commit
You need to basically create a new branch & cherry-pick the commits you want to add to it.
Note: you might need these before the checkout/cherry-pick commands
git remote add upstream <git repository>
git remote update
git checkout -b <new-branch-name> upstream/master
git cherry-pick <SHA hash of commit>
git push origin <new-branch-name>
Afterwards, you will see <new-branch-name>
branch on github, switch to it and can submit the pull request with the changes you want.
Create a new branch starting from the latest commit, which is also in the origin repository:
git branch new-branch origin/master
git checkout new-branch
Then use git cherry-pick
to get the single commit you want the pull request for. If the branch with this commit is called feature
and the commit you want is the latest commit in this branch, this will be
git cherry-pick feature
Assuming this patch applies without conflict, you got now a branch for which you can do your pull request.
In a second step, you now need to decide what to do with your feature
branch. If you haven't published your changes on this branch yet, the best procedure is probably rebasing this branch upon new-branch (and removing the last commit, if this is not done automatically by git rebase
).
I ended up in a situation where I had forked a fork and wanted to submit a pull request back to the original project.
I had:
- orignal_project
- forked_project (created from original project at SHA: 9685770)
- my_fork (created from forked project at SHA: 207e29b)
- a commit in my fork (SHA: b67627b) that I wanted to submit back to original project
To do this, I:
- created a new branch from the SHA where the original project was forked
- pulled all from the original project
- cherry picked the commit I wanted to submit as a pull request
- pushed it all up to github
The git commands were something like:
- git branch my-feature-request 9685770
- git checkout my-feature-request
- git pull https://github.com/original_project/original_project.git
- git cherry-pick b67627b
- git push origin my-feature-request
Then I picked my-feature-request as the branch for my pull request to the original project.
This almost worked for me:
git checkout -b upstream upstream/master
git cherry-pick <SHA hash of commit>
git push origin upstream
The only difference was this:
git push origin upstream:upstream
I needed to change that last line so that git push would make the upstream branch in my GitHub repo so that I could make PR from it.
I had already made the commit which I wanted to be able to isolate as a pull request back onto the current branch.
So I checked out a new branch
git checkout -b isolated-pull
And here's where my solution differs from @Kevin Hakanson's, as I need to reset this branch to the place in the history I want to diff from
git reset --hard [sha-to-diff-by]
And cherry-pick the commit from which I want to create an isolated pull request
git cherry-pick [my-isolated-commit-sha]
Finally push it up to the remote
git push origin isolated-pull
And pull request dat shi.