Creating a PR from a specific commit

create pull request for specific commit bitbucket
git pull specific commit
git cherry-pick
convert commit to pull request
git create pull request command line
git pull code from commit id
bitbucket exclude commit from pull request
github pull request workflow

I want to create a PR with a single commit, so I checkout a new branch with commmit SHA,

git checkout -b new-branch 8517c80183607461ea

How do I create a PR from here?

Because of the way Git branches work, it's not enough to make a branch off a single commit. You might drag in more commits.

For example, let's say your repository looks like this.

A - B - C [master]
         \
          D - E - F [feature]

master and feature are just labels pointing to a commit. master points at commit C. feature points at commit F.

Git commits do not live in isolation. They take their whole history with them. F cannot exist without E, D, C, B, and A. If you push feature then F will bring E and D along with it (assuming C is already pushed).

Let's say you want to send a PR of only E. So you make a branch at E.

$ git checkout -b new-branch E

A - B - C [master]
         \
          D - E [new-branch]
               \
                F [feature]

All that's done is created a label called new-branch pointing to commit E. The structure of the commits remains the same. If you then push new-branch it will drag D along with it. This is why sometimes when you think you're pushing only a few commits the PR contains many more commits.


In order to really push just one commit, you need to detach it from its history. You can do this with a git cherry-pick. This basically takes the commit, turns it into a patch, and patches it somewhere else.

Going back to your original repository...

A - B - C [master]
         \
          D - E - F [feature]

You'd make a new branch off master.

$ git checkout -b new-branch master

          [new-branch]
A - B - C [master]
         \
          D - E - F [feature]

(Note that nothing changed except a new branch label was made pointing at C.)

Then cherry pick E. This will copy E as a new commit on top of C. There may be conflicts, resolve them as normal.

$ git cherry-pick E

          E1 [new-branch]
         / 
A - B - C [master]
         \
          D - E - F [feature]

Now you can push new-branch and only E1 will be in the PR.

How to create a GitHub pull request with a specific commits?, Get back into the branch you're merging into. I want to create a PR with a single commit, so I checkout a new branch with commmit SHA, git checkout -b new-branch 8517c80183607461ea How do I create a PR from here?

You need to push new-branch to Github, and then open a pull request. This will include all commits reachable from 8517c80183607461ea but not already in the history of master.

If you want to include only 8517c80183607461ea, then you need to rebase new-branch onto master using git rebase -i master, and delete all the lines except the one mentioning 8517c80183607461ea. After the rebase, your branch new-branch will contain the rebased 8517c80183607461ea with its new commit ID, directly on top of master, and you can push your branch/issue a pull request.

How to "pull request" a specific commit, you want to pull into your branch. To see all the changes for the PR we can run the above example with -p, but to see the changes for each commit we will have to run another command given the exact commit gif diff [SHA1] [SHA1]^. Up until now we worked with git features alone, meaning that pull requests is a git term and the CLI supports everything that is shown in the UI

I've had a little bit of trouble using Schwern's answer since I was making the error of being on master of a forked project while making commits (here I'm calling it a rookie mistake).

Following Schwern's graphs let's say I've forked a project at C and proceeded on master with the other commits. Here I am adding an asterisk to signal that new changes are happening on the fork:

A - B - C - D* - E* - F* [master]

If you want to cherry-pick only some of the commits (say D and E) what you shouldn't do is:

git checkout -b new-branch upstream/master
git cherry-pick <hash of commit D>
git cherry-pick <hash of commit E>
git push -u origin new-branch

In this case you're trying to branch out the master at F* and cherry picking the previous commits will get you the warning

"The previous cherry-pick is now empty, possibly due to conflict resolution."

since you're adding the same old commits on the new branch.

What you should do instead is:

git checkout -b new-branch <hash of commit E>
git push -u origin new-branch

A - B - C - D* - E* - F* - G* [master]
                  \
              D* - E* [new-branch]               

After this you're ready to make a pull request with only the selected commits.

How to push only one commit with Git, Ever wanted to create a pull request in GitHub but only wished to commit changes that is relevant? You are in luck. In this tutorial, I am going to  Go to either the git log or the GitHub UI and grab the unique commit hashes for each of the commits that you want. "Cherry pick" the commits you want into this branch. Run this command: git cherry-pick super-long-hash-here. That will pull just this commit into your current branch.

One Commit per Pull Request, Create a new branch with just that change: $ git fetch --all $ git checkout -b my-​single-change upstream/master $ git cherry-pick b50b2e7 $ git  Create a pull request. To create a pull request in Azure Repos: Push your local branch. Create a pull request for the branch. You can do this in the Code view on the web from either the Pull Requests tab or the Files tab. You can also initiate a pull request from Visual Studio. Select the Pull Requests view when connected to your Project.

Making a Git Pull Request for Specific Commits, How do I create a pull request for a specific commit? You are suppose to create a branch with the latest changes and cherry-pick the ones that you want. And then compare that branch with the repository that you would like to contribute. The differences will only be the ones that you cherry-picked. Then, you are done. This is how you would create a GitHub pull request with a specific commits.

Creating a pull request, How do you create a pull request for a specific commit in bitbucket? Once you have split the commit, move the ones you want to include into a topic branch, see for example How to move certain commits to another branch in git?, but it depends if the commits that make your pull request are sequential. Then finally you can push to Github and create the pull request from your topic branch.

Comments
  • Did you try git push origin new-branch? You just have to create a PR from within new-branch afterwards.