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 é fazer manualmente o inverso e commitar o resultado. Mas e se as alterações forem complexas e você não quiser mexer nelas?
Para reverter qualquer commit anterior no Git, use o comando seguido do hash. Repare: esse comando não exclui o commit; ele cria um novo 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! Agora 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 e pedir 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 o diff gerado 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.
Essas são as alterações inversas do commit que introduziu o bug. É assim que se reverte qualquer commit do repositório.
Atenção: reverter alterações dessa forma não é infalível e pode gerar conflitos se o Git não conseguir aplicar o inverso. 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: avance aos poucos, siga uma sequência linear, mantenha o foco e desbloqueie gradualmente as entradas da Gitopedia. Quando quiser, continue praticando com o Git de verdade no VS Code, Cursor ou Antigravity IDE.
mas precisa de login