Fiz m*rda no GIT, e agora?

Daniane Gomes
2 min readFeb 9, 2022

Quando usar git reset e git revert

Photo by Steve Johnson on Unsplash
Threads que viraram posts

Fez commit que não devia? Bagunçou demais na hora do merge? Dois comandos do git são essenciais para corrigir esses problemas:

git reset e git revert.

Mas quando usar um ou outro?

Reset

git reset HEAD~n reverte n commits. Ou seja: git reset HEAD~3 retira os 3 últimos commits da branch local.

Serve para quando você quer descartar o que fez até o momento na sua branch e começar de novo. Os arquivos revertidos ficarão unstaged, então se quiser comitar, precisa fazer git add novamente. Se preferir que os arquivos voltem ao estado inicial, adicionar — hard.

Porém se você já fez push na sua branch, a única forma de enviar as alterações do reset para o servidor é fazendo um git push -f o que resultará em históricos perdidos e bagunçará a git tree.

Por isso, é recomendado NÃO usar esse comando em branches compartilhadas, onde mais de uma pessoa trabalha nela.

Revert

git revert HEAD~n reverte o n-ésimo commit indicado. Ou seja: git revert HEAD~2 vai reverter as alterações feitas somente pelo commit 2 a contar do último commit.

Também pode ser usado indicando o sha do commit, por exemplo:

git revert 12ab34cd

reverterá exatamente o commit 12ab34cd. Esse comando é o mais indicado para ser usado em branches compartilhadas, pois cria um novo commit para as alterações revertidas, mantendo assim históricos.

Resumindo

reset desaparece com os commits. NÃO usar em branches compartilhadas. revert desfaz criando novo commit. Pode usar em branches compartilhadas.

Uma prática legal para desfazer commits com tranquilidade é criar branch auxiliar e aí desfazer, pra só então enviar merge para a branch principal. Isso dá mais segurança e fica mais fácil de visualizar as diferenças antes de fazer o merge final.

Referências adicionais

Ambos os commit possuem mais opções que podem ser passadas junto com o comando. A documentação explica todas possibilidades:

O blog da Atlassian explica detalhadamente com desenhos:

A @jesstemporal tem um projeto legal com “colinhas” para os comandos do git (em português):

O site “Learn Git Branching” permite fazer testes com comandos git para simular o que acontece com cada um deles:

--

--