Undo last commit/merge

55,468

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
Share:
55,468
Siggy Petersen
Author by

Siggy Petersen

Updated on August 17, 2021

Comments

  • Siggy Petersen
    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 message Merge the remote changes before pushing again.

    Can anyone help me?