Rolling back local and remote git repository by 1 commit [duplicate]

If nobody has pulled your remote repo yet, you can change your branch HEAD and force push it to said remote repo:

git reset --hard HEAD^ 
git push -f 

(or, if you have direct access to the remote repo, you can change its HEAD reference even though it is a bare repo)

Note, as commented by alien-technology in the comments below, on Windows (CMD session), you would need ^^:

git reset --hard HEAD^^
git push -f 

And? as noted in the comments by Jon Schneider:

If the command with “HEAD^” results in error no matches found: HEAD^, see “git show HEAD^ doesn’t seem to be working. Is this normal?”

Update since 2011:
Using git push --force-with-lease (that I present here, introduced in 2013 with Git 1.8.5) is safer.

See Schwern’s answer for illustration.


What if somebody has already pulled the repo? What would I do then?

Then I would suggest something that doesn’t rewrite the history:

  • git revert locally your last commit (creating a new commit that reverses what the previous commit did)
  • push the ‘revert’ generated by git revert.

Leave a Comment