Excluding a commit from a PR that is already in a PR
remove commit from pull request
github cherry-pick pull request
github pull request exclude commit
git exclude file from pull request
git revert
git rebase
git revert commit
I have an open PR with a commit I did
I made another commit and want to create another PR with just these changes.. however the previous commit is in there.
I realize branches would resolve this, yet, here we are. Do I just need to wait for the PR to be merged?
I have an open PR with a commit I did
At that point your repository looked something like this.
A - B [master] \ C [pr1]
Commit B is where master
is at. And you have a branch called pr1
with a commit C on it.
I made another commit and want to create another PR with just these changes.. however the previous commit is in there.
What probably happened is you branched from pr1
rather than master
resulting in this.
A - B [master] \ C [pr1] \ D [pr2]
When you make a PR for pr2
by default the base branch is master
so it shows C
and D
in the PR.
If the work in D
does not depend on C
what you want is for pr2
and commit D
to be branched from master
.
D [pr2] / A - B [master] \ C [pr1]
You can fix this by rebasing pr2
onto master
.
git rebase --onto master pr1 pr2
That says to replay the commits starting at (but not including) pr1
to (and including) pr2
onto master
. Then you can push pr2
and create an independent PR.
If the work in D
does depend on C
then it's best to leave pr2
on top of pr1
. Create a PR for pr2
with the base being pr1
instead of master
. Once pr1
is reviewed and accepted, then pr2
can be reviewed and accepted.
Be sure to make a note in the PR description that pr2
is stacked on top of pr1
so the reviewer doesn't miss it. "This depends on #123" where #123 is the ID of pr1
's PR.
How to remove commits from a pull request, git checkout my-pull-request-branch. git rebase Now you'll have removed the commit from your remote, but will still have the changes locally. TRAVIS_COMMIT_RANGE uses triple dots, which includes commits that are in the base branch that are not in the PR. For example, if a commit is pushed to master with an incorrect summary, then every PR created before that commit will include the unrelated commit, causing the PR to fail the summary check.
Just create a new branch from whatever point you want to start and cherry-pick the other branch. That will apply the changes involved on the last revision of the other branch and no other changes (assuming it's the last revision from that branch).
How to exclude old commits in new pull request?, To exclude commits from your pull request branch you would perform an Unfortunately you already pushed your changes on your forked Rebase essentially rolls up all the commits on your branch and then moves the branch to the tip of master and then replays all your commits. This means that it looks as if you created the branch from the tip of master.
An easy way to do this, is by using interactive rebase.
If you run git log --oneline
on your branch, you should see something that looks like this:
ccccccc (HEAD -> your-branch-name) Your (good) commit you want to keep bbbbbbb bbbbbbb Your (bad) commit you want to remove from history aaaaaaa (master) Commit from you or someone else
You say you want to remove bbbbbbb
replacing it with ccccccc
.
Because ccccccc
contains changes since bbbbbbb
, removing it would cause lots of conflicts, as you'd have to merge ccccccc
into aaaaaaa
.
The git
way to do it, is to squash ccccccc
into bbbbbbb
, creating a new commit ddddddd
. And for that, you'd do the following steps:
1. Run git rebase -i aaaaaaa
to open the interactive rebase, starting from the commit immediatelly before the one you want to remove
This will open your configured text editor with something that looks like this:
pick bbbbbbb Your (bad) commit you want to remove from history pick ccccccc Your (good) commit you want to keep # Rebase aaaaaaa..f5a9551 onto aaaaaaa (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c <commit> to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # # Note that empty commits are commented out
The list shows what the interactive rebase will do:
From aaaaaaa
, pick bbbbbbb
, then pick ccccccc
2. As I said above, you want to squash ccccccc
into bbbbbbb
, so replace the word pick
before ccccccc
by squash
:
pick bbbbbbb Your (bad) commit you want to remove from history squash ccccccc Your (good) commit you want to keep
3. Save the file, and close the text editor.
4. Another text editor will open, to ask you to specify the message of the new commit being created, with the combination of ccccccc
and bbbbbbb
- which I'm calling ddddddd
for the sake of this example:
# This is a combination of 2 commits. # This is the 1st commit message: Your (bad) commit you want to remove from history # This is the commit message #2: Your (good) commit you want to keep
Here you probably want to delete everything except the last line, which has the message of your latest commit, but feel free to customize the message however you like.
5. Save the file, and close the text editor.
The rebase is done, and your history should look like this:
ddddddd (HEAD -> your-branch-name) Your (good) commit you want to keep aaaaaaa (master) Commit from you or someone else
6. Now, all you have to do is to send to push the branch back to your origin
(e.g. GitHub/BitBucket/GitLab), etc. in order to update your pull-request.
For that, you'll have to do a push --force
, so that your remote branch is replaced by this new one.
git push origin your-branch-name --force
Of course, you always have the option of closing the previous pull-request and opening a new one instead (with a different branch name).
How do we "reject" a commit on a Pull Request? · Issue #12 , Funny there is no "Merge at this point, ignore later" button. Merging the pull request will merge all commits in that branch to the base branch. In our company the system is set to perform the commitment as soon as the PR has been created. For example: Transaction FMB_PL01 shows something like that. Original Budget $1000. Purchase Req. $600. Remain Budget $400. Once created the PR, Ours PO are created with reference a contract which has a PR or the PO's are created directly against a PR.
How to merge only specific commits from a pull request with git , Now I had a pull request with one good commit and one bad commit. A screenshot of two commits, one good and one bad. I asked the author, If you want leave file in your branch, but not to merge it to main branch, you can delete it in one commit, then add again in another. Git allows you manually accept certain commits using git-cherry-pick. You can accept each commit except that in which you have added this file again.
3. Lifecycle of a Pull Request, If an issue is trivial (e.g. typo fixes), or if an issue already exists, you can skip this step. If a core developer reviewing your PR pushed one or more commits to your Do not fix more than one issue in the same commit (except, of course, if one "Cherry pick" the commits you want into this branch. Go to either the git log or the GitHub UI and grab the unique commit hashes for each of the commits that you want, and then run this command: git cherry-pick super-long-hash-here. That will pull just this commit into your current branch. Push up this branch like normal. git push origin master.
How To Rebase and Update a Pull Request, Once you submit a pull request, the process of contributing to a project can Now if you know the number of commits you've made on the branch that you want to Now, for each line of the file except for the first line, you should replace the This introduces a new commit and GitHub doesn't recognize that this squashed commit is the same as the ones already in master (but with different hashes). Git handles it properly but you see all the changes again in GitHub, making it annoying to review.
Comments
- Why not just revert it?
- What is the point of keeping in a private branch a revision you actually don't want in history? Just get the history fixed, no need to revert. #imho