Aquele suor frio. O coração que acelera. A tela do terminal parece te encarar com uma mensagem de erro vermelha e intimidadora. Se você é desenvolvedor, sabe do que estou falando. Em algum momento, todos nós já fizemos algo no Git que nos fez pensar: “E agora? Perdi tudo?”.
Calma. Respire. Você provavelmente não quebrou nada de forma irreparável.
O Git é uma ferramenta incrivelmente poderosa, mas também pode ser complexa. Este post é o seu manual de primeiros socorros. Um guia para as situações de pânico mais comuns, com comandos práticos para salvar seu dia (e seu código). Salve nos favoritos, você vai precisar.
Cenário 1: “Commitei algo que não devia!”
Este é o clássico. Você commitou um arquivo com senha, um código incompleto ou simplesmente o arquivo errado na branch errada. A solução depende de uma pergunta crucial: você já deu `git push`?
Caso A: O commit AINDA NÃO foi enviado para o repositório remoto (local)
Ufa! Este é o cenário mais fácil. Você pode simplesmente “voltar no tempo”. O comando para isso é o git reset.
Para desfazer o último commit, mantendo suas alterações no código prontas para serem commitadas de novo (staged):
# Desfaz o último commit, mas mantém os arquivos no stage
git reset --soft HEAD~1
Para desfazer o último commit e tirar as alterações do “stage”, mas mantendo-as nos seus arquivos (working directory):
# Opção mais comum: desfaz o commit e deixa os arquivos modificados
git reset --mixed HEAD~1 # ou simplesmente git reset HEAD~1
git reset --hard. Este comando desfaz o commit E apaga todas as alterações do seu código. Use com extrema cautela!
# APAGA TUDO do último commit. Use apenas se tiver certeza!
git reset --hard HEAD~1
Caso B: O commit JÁ FOI enviado com `git push`
Ok, sem pânico. NÃO USE `git reset` em branches compartilhadas! Resetar um commit que já está no repositório remoto reescreve o histórico, o que pode causar problemas enormes para seus colegas de equipe.
A solução segura e correta aqui é o git revert. Este comando não apaga o commit antigo; ele cria um novo commit que faz exatamente o oposto do commit que você quer desfazer.
# Encontre o hash do commit que você quer reverter com 'git log'
git log
# Copie o hash e use o revert
git revert <hash_do_commit_errado>
O Git abrirá um editor de texto para você escrever a mensagem do commit de reversão. Salve e feche, e pronto! Agora é só dar git push para enviar a correção.
Cenário 2: “Commitei com a mensagem errada ou esqueci um arquivo!”
Isso acontece o tempo todo. Se foi no seu último commit e você ainda não deu `push`, a solução é simples: git commit --amend.
Para apenas corrigir a mensagem do último commit:
git commit --amend -m "Aqui vai a nova mensagem corrigida"
Esqueceu de adicionar um arquivo? Sem problemas:
# Adicione o arquivo que faltou
git add arquivo_esquecido.js
# Faça o amend sem alterar a mensagem de commit
git commit --amend --no-edit
reset, o --amend também reescreve o histórico. Portanto, só o utilize em commits que ainda não foram enviados para a branch remota.Cenário 3: “MERGE CONFLICT! O que são esses `<<<<<<< HEAD`?"
Conflitos de merge acontecem quando você e outra pessoa (ou você mesmo em outra branch) alteram as mesmas linhas de um mesmo arquivo. O Git não sabe qual versão manter, então ele pausa o processo e pede sua ajuda.
- Não se desespere. O Git te mostra exatamente onde está o problema.
- Abra o arquivo com conflito. Você verá algo assim:
<<<<<<< HEAD código da sua branch atual (ex: main) ======= código da branch que você está tentando mesclar >>>>>>> nome-da-outra-branch - Seja o juiz: Sua tarefa é editar essa parte do código e deixar apenas a versão final que você deseja. Apague as linhas com
<<<<<<<,=======,>>>>>>>e o código que você não quer mais. - Informe ao Git que você resolveu: Depois de editar e salvar o arquivo, adicione-o ao stage.
git add <nome_do_arquivo_resolvido> - Finalize o merge: Agora, basta criar o commit de merge.
git commitO Git geralmente já sugere uma mensagem padrão. Apenas salve e pronto. Conflito resolvido!
O Duelo Final: `git reset` vs. `git revert`
Esta é a dúvida mais importante a ser esclarecida. Entender a diferença te tornará um desenvolvedor muito mais confiante com Git.
| git reset | git revert |
|---|---|
| Reescreve o histórico (destrutivo). | Preserva o histórico, adicionando um novo commit. |
| Move o ponteiro da branch para um commit anterior, “esquecendo” os commits posteriores. | Cria um novo commit que é o inverso de um commit anterior. |
| Quando usar: APENAS em commits locais que nunca foram enviados para o repositório remoto. | Quando usar: Em commits que já estão no repositório remoto e foram compartilhados. |
| Risco: Alto se usado incorretamente em branches compartilhadas. | Risco: Baixo. É a forma segura de desfazer alterações públicas. |
revert). O histórico da sua máquina, antes do push, é seu para organizar como quiser (reset, amend).Conclusão
O Git é seu amigo, não seu inimigo. Como toda ferramenta poderosa, ele exige respeito e conhecimento. Da próxima vez que o pânico bater, volte a este guia, respire fundo e lembre-se: quase tudo tem conserto.
Qual foi o maior “aperto” que você já passou com o Git e como resolveu? Compartilhe sua história de guerra nos comentários!

