问题
I did a pull request but after that I made some commits to the project locally which ended polluting my pull request, I tried to remove it but without any luck.
I found some similar questions on StackOverflow but I can't apply what's in there. It's my first pull request on GitHub so it's kinda strange to me how all of this works.
The highlighted commit is the one I need to keep and remove all the other stuff. It becomes the fourth commit in the history because I make some merge stuff.
my git log
Can someone please explain what's going on and how to fix this problem?
回答1:
You have several techniques to do it.
This post - read the part about the revert will explain in details what we want to do and how to do it.
Here is the most simple solution to your problem:
# Checkout the desired branch
git checkout <branch>
# Undo the desired commit
git revert <commit>
# Update the remote with the undo of the code
git push origin <branch>
The revert command will create a new commit with the undo of the original commit.
回答2:
People wouldn't like to see a wrong commit and a revert commit to undo changes of the wrong commit. This pollutes commit history.
Here is a simple way for removing the wrong commit instead of undoing changes with a revert commit.
git checkout my-pull-request-branch
git rebase -i HEAD~n
// wheren
is the number of last commits you want to include in interactive rebase.- Replace
pick
withdrop
for commits you want to discard. - Save and exit.
git push --force
回答3:
If you're removing a commit and don't want to keep its changes @ferit has a good solution.
If you want to add that commit to the current branch, but doesn't make sense to be part of the current pr, you can do the following instead:
- use
git rebase -i HEAD~n
- Swap the commit you want to remove to the bottom (most recent) position
- Save and exit
- use
git reset HEAD^ --soft
to uncommit the changes and get them back in a staged state. - use
git push --force
to update the remote branch without your removed commit.
Now you'll have removed the commit from your remote, but will still have the changes locally.
回答4:
So do the following ,
Lets say your branch name is my_branch and this has the extra commits.
git checkout -b my_branch_with_extra_commits
(Keeping this branch saved under a different name)gitk
(Opens git console)- Look for the commit you want to keep. Copy the SHA of that commit to a notepad.
git checkout my_branch
gitk
(This will open the git console )- Right click on the commit you want to revert to (State before your changes) and click on "
reset branch to here
" - Do a
git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
Now look at the local branch commit history and make sure everything looks good.
来源:https://stackoverflow.com/questions/36168839/how-to-remove-commits-from-a-pull-request