Introdução
Você já se encontrou em uma situação em que fez um commit que não deveria, ou fez muita bangunça para fazer o merge?
Se sua resposta for sim e você não encontrou uma solução favorável, então os comandos git reset
e git revert
podem te salvar em um próximo encontro com esses problemas. Mas quando se deve usar um ou outro?
Git Reset
Serve para descatar o que foi feito até o momento na branch. Os arquivos revertidos ficarão no modo unstaged, então se quiser fazer o commit deles, precisarão adiciona-los novamente com o comando git add
.
Você também pode usar a flag –hard para descartar todas as alterações, não havendo possibilidades de adicionar os commits novamente.
Sintaxe: $git reset HEAD~n
Tradução: Reverte n commits da branch local.
Exemplo: $git reset HEAD~4
Explicação: Retira os 4 últimos commits da branch local.
Este comando gera um risco, por exemplo, se você já enviou commits da sua branch para um repositório remoto, o único modo de enviar os commits revertidos para o respositório remoto é forçando com o comando $git push --force
. Logo, resultará em históricos perdidos e seu grafo no git ficará bagunçado. Então, usar git reset
não é recomendo para usar em repositórios com mais de uma pessoa trabalhando.
Git Revert
Serve para desfazer as alterações de um commit, criando um novo commit. Comando para usar em repositórios compartilhados.
Sintaxe: $git revert HEAD~n
Tradução: Reverte o n-ésimo commit indicado.
Exemplo: $git revert HEAD~4
Explicação: Reverte as alterações feitas pelo commit 4, começando a contagem pelo último commit.
Referências
Git - git-revert Documentation (git-scm.com)
Git - git-reset Documentation (git-scm.com)
Resetting, Checking Out & Reverting | Atlassian Git Tutorial
GitFichas | GitFichas
Learn Git Branching
Fluxo de trabalho de Gitflow | Atlassian Git Tutorial