6. Histórico

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?

Vamos descobrir

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?

Faz sentido

Vamos praticar. Primeiro, vamos introduzir um "bug" no nosso código.

Arquivo: hello.html
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Tarefa
Concluída

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.

Arquivo: hello.html
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="style.css"/>
    </head>
    <body>
        <h1>Hello, World!</h1>
        <p>This is a bug!</p>
    </body>
</html>
Tarefa
Concluída

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.

Tarefa
Concluída

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 <commit> pelo hash real no comando a seguir:

Executar no terminal:
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.

Tarefa
Concluída

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.

Tarefa
Concluída

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.

Next step
Quer testar o modo história?

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.

Modo história
GRATUITO
mas precisa de login