Revertendo alterações feitas em commits antigos
Certo, já aprendemos a conferir o histórico do nosso repositório e a comparar alterações entre commits.
E se descobrirmos um bug em um commit feito um tempo atrás? Como desfazer as alterações feitas por esse commit?
O jeito mais simples de desfazer alterações é simplesmente replicar as alterações inversas e commitá-las. Mas e se as alterações forem complexas e você não quiser mexer nelas?
No Git, você pode reverter qualquer commit anterior usando o comando seguido do hash do commit que você quer reverter. Repare: esse comando não exclui o commit; ele cria um novo commit com as alterações inversas. Adicionar um commit extra pode parecer redundante, mas ajuda a manter o histórico consistente. Afinal, e se você perceber que as alterações revertidas estavam certas, no fim das contas?
Vamos praticar. Primeiro, vamos introduzir um "bug" no nosso código.
<html>
<head>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a bug!</p>
</body>
</html>Adicione a linha <p>This is a bug!</p> ao hello.html, adicione as alterações ao stage e faça o commit com a mensagem Introduced a bug.
Ótimo! Neste ponto, ainda podemos cancelar as alterações com git commit --amend. Mas e se descobrirmos o erro tarde demais? Vamos fazer mais um commit razoável e depois mostrar como reverter o commit anterior, que continha as alterações indesejadas.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a bug!</p>
</body>
</html>Adicione a linha <!DOCTYPE html> ao hello.html, adicione as alterações ao stage e faça o commit com a mensagem Added HTML5 doctype.
Agora, vamos conferir o hash do commit que introduziu o bug. Execute git log para descobrir.
Execute git log e encontre o hash do commit que introduziu o bug.
Dica: lembre-se de que você pode rolar a saída do git log usando as setas e do teclado. Para sair do modo pager, pressione q.
Com o hash do commit, agora podemos reverter as alterações feitas por esse commit. Substitua pelo hash real no comando a seguir:<commit>
git revert <commit>Isso vai abrir seu editor de texto padrão pedindo uma mensagem de commit. Você pode deixar a mensagem padrão, salvar e fechar o arquivo.
Reverta o commit que introduziu o bug usando git revert.
Ótimo, o bug foi revertido. Agora confira a diferença feita pelo último commit. Lembra como fazer isso com ? Você vai precisar lembrar como o commit anterior ao mais recente.
Confira o diff entre os dois últimos commits.
Como você pode ver, essas são as alterações inversas do commit que introduziu o bug. É assim que você pode reverter qualquer commit do seu repositório.
Atenção: reverter as coisas desse jeito não é infalível e pode gerar conflitos se o Git não conseguir aplicar as alterações inversas. Nesse caso, você vai precisar resolver os conflitos manualmente. Se quiser aprender mais sobre resolução de conflitos, fique por aqui depois do curso principal.
Faça o curso do jeito que ele foi pensado: progressão em pequenas doses, ordem linear e focada, desbloqueio gradual das entradas da Gitopedia. Continue com o Git de verdade no VS Code/Cursor/Antigravity/Windsurf a qualquer momento.
mas precisa de login