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 inerror 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 revertlocally your last commit (creating a new commit that reverses what the previous commit did)- push the ‘revert’ generated by
git revert.