Skip to content

Instantly share code, notes, and snippets.

@davidalves1
Last active May 3, 2024 18:38
Show Gist options
  • Star 72 You must be signed in to star a gist
  • Fork 17 You must be signed in to fork a gist
  • Save davidalves1/f437586fa63665024f18f82dc97a83a1 to your computer and use it in GitHub Desktop.
Save davidalves1/f437586fa63665024f18f82dc97a83a1 to your computer and use it in GitHub Desktop.
Desfazendo um git push

Desfazendo um git push

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:

  1. 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
  2. Utilizar o comando $ git revert HEAD~0
  3. Utilizar o comando $ git stash apply
  4. Utilizar o comando $ git push origin sua-branch -f

Explicação

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.

Observação

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! :)

@GuilhermeVSS
Copy link

Se eu quiser desfazer alguns, eu refaço esses passos até chegar na versão que eu desejo?

@davidalves1
Copy link
Author

Fala @GuilhermeVSS, não cheguei a testar, mas deve funcionar sim. Na real esse procedimento que eu descrevi é para o caso de fazer um push e se arrepender ou der algum problema. Se quer voltar a uma versão anterior é só substituir o hash para a versão do commit na linha do tempo que você quer voltar.

@andersonsantech
Copy link

Poxa velho, não funcionou, quando eu dou um push para voltar no repositório do github da erro.
To https://github.com/andersonsantan/siteteste.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/andersonsantan/siteteste.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

@atimermann
Copy link

atimermann commented Mar 4, 2020

Você precisa por argumento -f para forçar.

faltou um passo no meio: git push -f

@Pabllolins
Copy link

Muito obrigado, funcionou aqui.
Com o: "$ git push -f " no final conforme o @atimermann citou

@Elizeuvix
Copy link

Só não sei o que é hash

@Pabllolins
Copy link

Só não sei o que é hash

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.

@vanessa-carvalho-dev
Copy link

vanessa-carvalho-dev commented Mar 27, 2021

Você precisa por argumento -f para forçar.

faltou um passo no meio: git push -f

Essa dica do @atimermann me ajudou, bigadão SZ

@cassiompf
Copy link

Vlw, muito obrigado! Esse tutorial salvou meu dia hehe👏

@rafaeljneves
Copy link

Salvou meu dia também ! Thanks !

@raflisboa
Copy link

Funcionou pra mim, e não no Github, mas sim no Gitlab. Obrigado!

@LucianoBritis
Copy link

Esse post me ajudou, eu estava procurando como reverter um push, Obrigado.
Ah e só vai com 'force' mesmo no push.

@gabmotamelo
Copy link

Obrigado, essas instruções me ajudou demais!!

@davidalves1
Copy link
Author

Valeu demais pelo feedback pessoal. Já atualizei com as sugestões nos comentários. Aproveitei pra fazer umas alterações que imagino que possa facilitar o processo.

@gcrozatti
Copy link

Excelente!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment