Não é possível desfazer um push diretamente, como é feito com o commit utilizando o comando $ git reset --soft|mixed|hard hash-do-penultimo-commit
Para desfazer um push são necessários 3 passos:
- Utilizar o comando
$ git reset --mixed HEAD~1
e em seguida utilizar o comando$ git stash
(se preferir pode usar a opção-m "revertendo o push blablabla"
para salvar o stash com um contexto do que foi feito - Utilizar o comando
$ git revert HEAD~0
- Utilizar o comando
$ git stash apply
- Utilizar o comando
$ git push origin sua-branch -f
No passo 1, estamos recuperando os arquivos enviados com o git reset e criando um 'ponto de restauração' com o git stash para não perdermos as modificações enviadas. No git reset, ao invés do alias HEAD~1
, pode ser utilizado o hash do penúltimo commit que o resultado é o mesmo.
No passo 2, criamos um novo commit revertendo o commit anterior, apagando as modificações realizadas. Aqui o alias HEAD~0
pode ser substituído pelo hash do último commit.
No passo 3, utilizamos o 'ponto de restauração' criado no passo 1 para recuperar as modificações realizadas antes do push.
Para finalizar, no passo 4 substituímos o push com o código correto a ser enviado para o repositório.
Para verificar os logs do commit podemos utilizar o comando $ git log --stat
que mostra o hash, a descrição e os arquivos modificados nos commits.
Pronto! :)