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! :)
Olá @Elizeuvix, boa noite, sou novo no versionamento com Git, sobre o hash o pouco que sei é:
Sempre que fazemos commits durante nosso desenvolvimento, o Git gera um "marcador" (ID) com vários caracteres, e cada commit tem o seu (ID) diferente, eles são como uma espécie de check-point em um jogo, onde você pode voltar a partir daquele ponto, só que do código.
Mas para voltar em um ponto específico do código, por exemplo em um comando de reset, você não precisa utilizar todos os caracteres, apenas os 6 primeiros caracteres são necessários.
Chama-se de hash, esses seis primeiros caracteres ou todo o ID do commit.
Espero ter ajudado, abraço.