Você tem uma resposta muito boa para isso aqui: link
E eu cito
Note: please see alternative to
git rebase -i
in the comments below—
git reset --soft HEAD^
Primeiro, remova o commit no seu repositório local. Você consegue fazer isso usando
git rebase -i
. Por exemplo, se é seu último commit, você pode fazergit rebase -i HEAD~2
e exclua a segunda linha do editor janela que aparece.Em seguida, force o envio para o GitHub usando
git push origin +master
.Veja Git Magic Capítulo 5: Lições de História - E Depois Algumas para mais informações (ou seja, se você quiser remover commits antigos).
Ah, e se a sua árvore de trabalho está suja, você tem que fazer um
git stash
primeiro e depois umgit stash apply
depois.
Espero que isso ajude você:)
==== EDIT ====
Na verdade, apenas reli o post ao qual me vinculei e especialmente o comentário "word of caution 2" link
A partir disso, aprendi que o git parece criar um novo commit e mover o ponteiro para ele, em vez de excluí-lo ao usar force push. Isto é, se alguém já tiver o SHA1 do seu commit, ele ainda poderá acessá-lo. Então, ao levar isso em consideração, devo recomendar que você faça o que Tomasz Klim sugeriu.