Programa
No desenvolvimento de software, erros são inevitáveis, mas o que importa é como você lida com eles, principalmente em equipe.
Quando você tá trabalhando com o Git num repositório compartilhado, você não quer só desfazer um commit ruim; você quer fazer isso com segurança. É por isso que escrevi, com base na minha experiência, um artigo em git revert
.
Em vez de apagar a história como git reset
, git revert
cria um novo commit que desfaz as alterações feitas em um anterior. Essa abordagem mantém seu histórico de commits.
Se você ainda não conhece esses conceitos, faça nosso programa de habilidades Fundamentos do Git e aprenda tudo sobre repositórios e controle de versão.
O que é o Git Revert e como funciona?
Pense em “ git revert
” como a maneira do Git dizer “Vamos desfazer isso com segurança”. Quando algo passa despercebido em um commit — talvez um bug, um erro de digitação ou uma alteração feita às pressas —, você pode ficar tentado a excluí-lo. Mas, em um repositório compartilhado, apagar o histórico pode causar mais problemas do que o erro original. É por isso que existe o site git revert
. Em vez de apagar o commit, ele adiciona um novo que cancela as alterações.
Então, o que faz o site git revert
?
-
Isso adiciona um novo commit: Como eu já tinha falado, em vez de apagar alguma coisa, o comando “
git revert
” cria um novo commit que desfaz as alterações específicas daquele que você está revertendo. Isso mantém o histórico do seu projeto consistente. -
A mudança é aplicada na hora: Como ainda não disse, assim que você executar o comando “
git revert
”, as alterações revertidas aparecerão no seu diretório de trabalho. Então você vai ver a correção ao vivo. -
Não interfere na preparação (a menos que haja um conflito): Outra coisa que você precisa saber: O Git cuida da reversão internamente. Se tudo correr bem, não precisa preparar os arquivos manualmente. Mas, se o Git não conseguir descobrir como reverter algo (como em mesclagens complexas), ele vai pedir pra você dar uma força.
O que rola depois de reverter um commit
Então, você executou git revert
. O que rolou mesmo? Em vez de apagar alguma coisa, o Git cria um novo commit que desfaz as mudanças feitas no que você escolheu. Esse novo commit vai aparecer no topo do seu histórico, o que significa que o commit original continua lá, sem mudanças e totalmente visível. Nada é reescrito ou removido; em vez disso, o Git adiciona uma camada que basicamente diz: “Desfaça isso”. Ao mesmo tempo, as alterações no arquivo resultantes dessa reversão são aplicadas imediatamente ao seu diretório de trabalho. Você vai ver a correção funcionar na hora, igual a qualquer outro commit.
Todo esse processo faz com que git revert
seja a maneira mais segura de corrigir erros que já foram enviados para um branch compartilhado. Todo mundo na equipe consegue ver o que foi alterado, o que foi revertido e por quê, sem confusão ou interrupção no trabalho em andamento.
Comparando git revert com git reset
Embora tanto git revert
quanto git reset
possam ser usados para desfazer commits, eles funcionam de maneiras bem diferentes. git reset
é bom para correções locais e privadas. Permite limpar commits confusos e redefinir o diretório de trabalho exatamente como você quer. Mas tem um porém: Se você já enviou seu trabalho e depois usou o comando git reset
, você pode causar problemas para seus colegas de equipe ao alterar o histórico de commits compartilhados.
Por outro lado, git revert
foi feito especialmente para ramos compartilhados ou públicos. Em vez de apagar alguma coisa, ele cria um novo commit que cancela as alterações de um anterior. Isso torna mais seguro em projetos compartilhados.
Aqui tá uma comparação lado a lado pra deixar isso mais claro:
Recurso |
git reverter |
git reset |
Ação |
Adiciona um novo commit que reverte um commit anterior. |
Move o ponteiro do ramo e, se quiser, modifica os arquivos |
Histórico de commits |
Tudo guardado, nada apagado |
Os commits reescritos podem ser perdidos. |
Ideal para |
Desfazendo alterações em um branch público/compartilhado |
Limpar commits locais antes de enviar |
Impacto nos outros |
Seguro, sem atrapalhar os colegas |
Risco pode causar conflitos se o histórico for compartilhado |
Diretório de trabalho |
Alterações aplicadas imediatamente |
Pode redefinir os estados dos arquivos (--soft, --mixed, --hard) |
Cenário ideal |
Reverter um commit ruim que já foi enviado |
Reescrevendo o histórico de commits em um branch de recurso local |
Revertendo vários commits
Às vezes, não é só um commit ruim, você pode precisar desfazer uma série deles. Felizmente, o Git permite reverter vários commits com um único comando usando um intervalo de commits.
A sintaxe é assim:
git revert OLDEST_HASH^..NEWEST_HASH
Isso diz ao Git para começar logo antes do commit mais antigo (é pra isso que serve o ^
) e reverter cada commit até o mais recente, inclusive. Por exemplo:
git revert a1b2c3d^..d4e5f6g
Esse comando vai gerar commits de reversão separados para cada um dos commits originais nesse intervalo.
Atenção, reverter vários commits de uma vez pode muitas vezes causar conflitos de mesclagem, especialmente se esses commits afetaram os mesmos arquivos ou linhas. O Git vai tentar reverter cada commit na ordem, mas pode precisar da sua ajuda pra resolver mudanças que se sobrepõem.
Você também pode ler mais sobre como o Git lida com operações de reversão, incluindo casos mais complicados, comocommits de mesclagem, em Git Revert Merge Commit: Um guia com exemplos.
Como lidar com conflitos de mesclagem durante a reversão
Reverter pode parecer simples até que o Git te surpreende com uma bola curva: um conflito de mesclagem. Isso geralmente aparece quando:
- Você está revertendo um commit que mudou as mesmas linhas que outros commits recentes.
- Você está revertendo um commit de mesclagem ou um grupo de commits com alterações sobrepostas.
O Git faz o possível para reverter as alterações de forma limpa, mas se houver alguma ambiguidade, ele vai parar e pedir sua ajuda.
Veja como lidar com isso:
git revert HEAD
E, pra ver quais arquivos estão em conflito, usa:
git status
Pararesolver manualmente os conflitos no seu editor de código, procure os marcadores “ <<<<<<<
”, “ =======
” e “ >>>>>>>
”.
Aqui, estou marcando como resolvidos:
git add <resolved-file>
Agora, vou continuar a reverter:
git revert-- continue
Se você mudar de ideia e quiser cancelar totalmente a reversão:
git revert --abort
Esse fluxo te dá controle total. Você pode decidir se quer continuar com a reversão ou desistir completamente.
Se você quiser entender como o Git mantém o controle dos logs de referência durante operações como essa, dê uma olhada em Git Reflog: Entendendo e usando logs de referência para dicas sobre como resolver problemas com históricos confusos.
Casos excepcionais: Revertendo commits de mesclagem
Reverter um commit normal é bem simples, mas commits de mesclagem são outra história. Isso porque um commit de mesclagem tem dois ou mais pais, e o Git precisa saber qual caminho (ou “linha principal”) deve tratar como base.
Para reverter um commit de mesclagem, você vai precisar usar explicitamente a flag -m
flag explicitamente.
git revert -m 1 <merge-commit-hash>
Aqui está o que a bandeira “ -m
” faz:
-
-m
significa linha principal e diz ao Git qual commit pai deve ser mantido. -
1
normalmente se refere ao primeiro pai, geralmente o branch em que você estava quando a fusão aconteceu. -
2
é o segundo pai, geralmente o ramo que foi mesclado.
Quando você usaria 1 ou 2?
-
Use “
-m 1
” se quiser desfazer o efeito das alterações mescladas, mas manter o trabalho do seu branch principal. -
Use “
-m 2
” se quiser remover as alterações da linha principal, mas manter o recurso ou o conteúdo do branch mesclado. Isso é raro. Reverter um commit de mesclagem pode causar conflitos e muitas vezes deixa tudo confuso, principalmente se os commits seguintes dependem dele. Se você não tiver certeza, tente reverter em um ramo de teste primeiro.
Melhores práticas ao usar git revert
Para aproveitar ao máximo o git revert
e evitar os erros mais comuns, lembre-se destas práticas recomendadas:
-
Dá uma olhada nos hashes do commit antes de reverter: Sempre dá uma olhada no seu histórico de commits usando
git log
ougit log-- oneline
pra garantir que você tá focando na mudança certa. Você pode revisar esses comandos emn Fundamentos do Git ou manter o essencial à mão com nossa Folha de Referência do Git. -
Personalize sua mensagem de commit: Não se contente com a mensagem padrão “Reverter” do Git. Adicione contexto — tipo por que você reverteu o commit — pra ajudar os colaboradores (e você mesmo no futuro) a entender a mudança.
-
Comunicar quando voltar para ramos compartilhados: Se você estiver revertendo alterações em um branch público, como main ou develop, avise sua equipe primeiro. As reversões afetam todo mundo, então é melhor a gente se organizar. Saiba mais sobre fluxos de trabalho colaborativos nos nossos cursos Conceitos do GitHub e Conceitos intermediários do GitHub.
-
Evite reverter uma reversão, a menos que tenha certeza: Reverter uma reversão anterior pode trazer de volta alterações indesejadas ou causar conflitos. Se você precisar reaplicar uma alteração, considere usar git cherry-pick em vez de.
- Use reflog para recuperar se algo der errado: Cometeu um erro no meio da reversão? Use git reflog para ver suas ações recentes e recuperar estados de perdidos.
Conclusão
Se você está colaborando em um ambiente profissional, git revert
para o último commit usando git revert HEAD
ajuda a manter a transparência e reduzir o risco de perda acidental de dados. Seja pra consertar um erro ou reverter um bug, o revert mantém seu repositório estável e fácil de entender pra todo mundo envolvido.
Aprenda hoje os fundamentos do Git
Escritor técnico especializado em IA, ML e ciência de dados, tornando ideias complexas claras e acessíveis.