Undo last commit/merge
Solution 1
Your feature branch will still point to your work. You will not lose those changes.
As plaes said, you can reset master back one with
git reset --hard HEAD^
If you want to grab some specific files from your branch without merging, you can check them out:
git checkout yourbranch -- file1 file2 etc
If you want some files from master from before the merge you can also check these out:
git checkout master^ -- file3 file4 etc
This is not ideal but it is what is needed sometimes. A merge /may/ mean that you reject some changes from either side in a merge. The best way to attain a proper merge is to:
git merge --no-commit yourbranch
from master, then run the git checkout commands from above and finally commit:
git add . -A
git commit
When you push this branch now, you will need to add the force
option
git push --force
or
git push -f
Hope this helps.
Solution 2
Hehe, you almost figured it out:
git reset --hard HEAD^
Solution 3
The problem here is that you want to undo changes that you already have pushed to the central repository. If you hadn't pushed them in the first place, a git reset --hard/--soft/--mixed HEAD^ would have done the trick.
So when you have reseted your HEAD git complains when you try to push to the origin and update the remote ref which is not an ancestor to your HEAD. Use --force:
git push --force origin master
Siggy Petersen
Updated on August 17, 2021Comments
-
Siggy Petersen almost 3 years
I have messed up my git repo a little. I worked on a feature in a separate branch. After finishing the work, I switched to the master to merge it into, but my partner pushed a few files which came into conflict with mine. After the merge, the conflict and pushing the new changes, I saw that I committed the older changes of my partner too.
Now I want to redo this commit/merge. I tried
git reset --soft HEAD^
but when I wanted to push, I got this error messageMerge the remote changes before pushing again
.Can anyone help me?