git stash: guardar mudanças sem fazer commit
Como guardar o trabalho pela metade para atender um chamado urgente, recuperar com pop ou apply, nomear o stash e resolver conflito na hora de aplicar.
git stash guarda temporariamente mudanças rastreadas e devolve a working tree
ao commit atual. Ele serve para interromper uma tarefa por pouco tempo, trocar
de branch e voltar. Não é backup remoto, não substitui commit e não inclui
arquivos novos por padrão.
No laboratório, o catálogo recebeu um livro ainda sem commit. O status antes de guardar era:
git status --shortUma urgência não precisa virar commit sem sentido
Imagine um chamado para corrigir o frete na main enquanto a busca está pela
metade. Comitar “WIP” na branch errada polui o histórico; descartar perde
trabalho. O stash cria uma entrada local e restaura a base:
git stash push -m "adiciona Refatoração"Pense num armário de curta permanência. Você coloca a bancada em um pacote nomeado e recupera depois. O limite é que o armário mora só nesse repositório e pode conflitar com mudanças futuras; não é um lugar durável para semanas de trabalho.
git status --shortgit status --short não escreveu nada depois da aplicação: a working tree
voltou ao estado do commit atual.
Dê nomes que sobrevivam à interrupção
Três entradas nomeadas ficaram ordenadas da mais recente para a mais antiga:
git stash liststash@{0} muda quando outra entrada chega. O texto depois de -m permite
reconhecer intenção sem abrir todos os patches. Para scripts, capture a
referência com cuidado ou use os subcomandos adequados; não suponha que o índice
de ontem continua igual.
Show revela o patch guardado
Antes de aplicar, leia a entrada:
git --no-pager stash show -p stash@{1}O patch mostra contexto e linha adicionada. Sem -p, show exibe um resumo.
Esse passo evita aplicar a entrada errada sobre uma tarefa urgente.
Arquivo novo exige a opção u
Por padrão, arquivos untracked não entram. No sandbox, notas.txt precisou de
-u, forma curta de --include-untracked:
git stash push -u -m "anota revisão de preços"Arquivos ignorados continuam de fora; existe --all, mas guardar dependências
e builds pode ser caro e esconder uma política ruim de ignore. Antes, confira
como funciona .gitignore.
Pop aplica e remove; apply só aplica
git stash apply stash@{1} tenta aplicar e mantém a entrada, útil quando você
quer testar ou reutilizar. pop tenta aplicar e remove apenas quando a operação
consegue completar. Comece com working tree limpa e confirme a referência. Se
usar apply, faça commit do resultado e então remova a entrada com drop.
O stage guardado pode ser restaurado com --index, mas isso aumenta a chance
de conflito quando a base mudou. Comece recuperando conteúdo e revise o status;
preservar exatamente a seleção antiga só é útil quando ela ainda representa a
mesma decisão.
Um pop com conflito preserva a entrada
O sandbox mudou o preço de Clean Code num commit e tentou aplicar um stash
que alterava a mesma região:
git stash pop stash@{1}The stash entry is kept in case you need it again.
A última frase é a proteção importante: como o pop falhou, a entrada ficou na pilha. A lista depois do conflito confirmou:
git stash listResolva os marcadores como em git merge, teste e faça commit. Depois apague o stash apenas se a resolução preservou o trabalho. A entrada não some automaticamente quando o pop conflita justamente para você não perder a única referência ao patch.
Stash também pode esconder dívida
Uma entrada de algumas horas é ferramenta. Dez entradas antigas sem nome são um inventário de decisões adiadas. Para trabalho que precisa sobreviver, prefira uma branch e um commit de rascunho claramente identificado; assim há histórico, push e possibilidade de colaboração.
Depois de confirmar o conteúdo de uma entrada antiga, o descarte real foi:
git stash drop stash@{1}Drop remove a referência, portanto não é o primeiro passo de diagnóstico. O
hash exibido pertence ao sandbox; na sua execução, copie a referência mostrada
por git stash list, não este identificador.
Organize a volta antes de abrir outra urgência
Ao terminar o chamado, volte à branch original, confirme working tree limpa e inspecione o stash antes de aplicar. Depois da recuperação, rode os testes que faziam sentido na base antiga e os que protegem mudanças que chegaram durante a interrupção. Um patch válido ontem pode violar uma regra adicionada hoje.
Se o stash produz conflito, não tente aplicar outras entradas por cima. Resolva ou aborte o estado atual, confira o índice e só então avance. Empilhar conflitos transforma um mecanismo temporário em recuperação forense desnecessária.
Sua missão é empilhar três stashes nomeados, incluindo um arquivo novo com
-u, inspecionar o segundo e recuperar com apply. Termine quando a lista
explicar sozinha cada intenção e você souber quando escolher uma
branch de tarefa no lugar do armário temporário. No
fluxo de equipe, commits compartilháveis são
preferíveis a trabalho que existe apenas na sua máquina.
Perguntas frequentes
stash vai para o GitHub quando faço push?
Dúvidas e comentários
Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.
Entrar para perguntarÉ o mesmo login gratuito dos cursos.
Nenhuma dúvida por aqui ainda — a primeira pode ser a sua.
Todo o código deste artigo foi executado em git version 2.54.0 (Apple Git-156) no macOS 27, e as saídas exibidas são as reais — como produzimos este conteúdo.
Fontes consultadas
- Git — git stash — git-scm.com
- Pro Git — Stash e limpeza — git-scm.com


