Undo last commit/merge

Siggy Petersen picture Siggy Petersen · Apr 11, 2011 · Viewed 48.4k times · Source

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?

Answer

Adam Dymitruk picture Adam Dymitruk · Apr 11, 2011

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.