
Recuperação de desastres no Git: reflog, stash, reset e restore
Objetivos desta aula
- Usar git stash para guardar trabalho em andamento
- Desfazer alterações com restore e reset
- Recuperar commits “perdidos” com reflog
- Escolher a ferramenta certa para cada situação
Todo mundo já pensou “estragou tudo” no Git. A boa notícia: quase nada se perde de verdade. Esta aula é o seu kit de primeiros socorros.
git stash guarda temporariamente o que você está fazendo: precisa trocar de branch mas não quer commitar ainda? git stash limpa a mesa; git stash pop devolve as alterações depois.
git restore desfaz alterações não commitadas: git restore arquivo descarta mudanças no arquivo (volta ao último commit); git restore --staged arquivo tira do stage sem perder o conteúdo.
git reset move o ponteiro da branch: --soft mantém tudo no stage, --mixed (padrão) mantém os arquivos mas tira do stage, --hard descarta tudo — use com muito cuidado.
git revert é o jeito seguro de desfazer um commit já publicado: cria um commit novo que desfaz o anterior, sem reescrever o histórico. Em branches compartilhadas, prefira revert a reset.
git reflog é o salva-vidas: registra para onde o HEAD apontou nos últimos tempos, inclusive commits “perdidos” por reset ou branch apagada. Ache o hash e faça git checkout -b resgate <hash>.
Resumo de emergência: alteração não commitada → restore; commit local errado → reset; commit já enviado → revert; perdi tudo → reflog.
Regra de ouro: nunca reescreva histórico já publicado (push force em branch compartilhada) sem combinar com o time.
Na prática
Kit de primeiros socorros
bash
git stash && git stash pop # guarda e devolve
git restore src/app.ts # descarta mudanças locais
git restore --staged src/app.ts # tira do stage
git reset --soft HEAD~1 # desfaz o último commit, mantém stage
git revert HEAD # desfaz o último commit com commit novo
git reflog # histórico de onde o HEAD esteve
git checkout -b resgate a1b2c3d # recupera commit “perdido”Por que isso importa
Saber se recuperar de erros no Git dá confiança para experimentar — e evita pânico em sexta-feira à tarde.
Erro comum
Usar git reset --hard por hábito e descartar horas de trabalho não commitado.
Dica de produção
Antes de qualquer operação destrutiva, crie uma branch de backup: git branch backup/antes-do-reset.
Pergunta de entrevista
Qual a diferença entre git revert e git reset? Quando usar cada um?
Glossário
- stash
- Prateleira temporária para alterações não commitadas.
- reflog
- Registro local de todos os lugares por onde o HEAD passou.
- revert
- Commit novo que desfaz um commit anterior.
- reset --hard
- Descarta commits e alterações locais (destrutivo).
Conexão com o CloudShop
Um deploy errado no CloudShop é revertido com git revert e o histórico fica limpo para auditoria.
Quiz da aula
1. Para desfazer um commit já enviado ao time, use:
2. Apagou uma branch com commits importantes. O que te salva?
3. O que `git stash` faz?
Minhas anotações
Salvo automaticamente neste navegador.
