Three ways to undo the last commit in git.

Undo last commit and destroy all changes

Use this in case you wish to rewind your HEAD to the previous commit and revert all the changes done in the last commit:

$ git reset --hard HEAD~1
  • If you do a git status after that, your branch will be clean and you changes gone. (CAUTION !)
  • You can rewind more than one commit. For example, you can go back 5 commits by using HEAD~5

Undo last commit but keep the files unchanged

Use this if you want to rewind your HEAD to the previous commit but keep your changes, as in the files will be still contain your changes. This is what you will probably want to use in most cases.

$ git reset HEAD~1
  • If you do a git status after that, you will see the list of all your changes unstaged.
  • You will have to readd your changes with git add. Then commit again.

Undo the last commit, keep the files unchanged and staged changes

Use this if on top of keeping the files unchanged you also want to keep your commit status.

$ git reset --soft HEAD~1

If you do a git status after, you will that your changes are already staged and ready to be committed.