Git stash: o comando que vai te salvar mais do que você imagina
← Voltar para Codeshort

Git stash: o comando que vai te salvar mais do que você imagina

git stash não é só um escape de emergência. Quando você entende o que ele realmente faz, vira parte do seu fluxo diário.

DC
Dev Code Software
19 de junho de 2026·5 min de leitura

O problema que o stash resolve

Você está no meio de uma feature. Arquivos modificados em três lugares, lógica pela metade, sem sentido commitar agora. Aí chega a mensagem: "consegue dar uma olhada naquele bug em produção?"

É aí que o dev inexperiente faz o commit com mensagem "wip" e o dev apressado descarta tudo. Os dois estão errados.

git stash existe exatamente para esse momento. Mas ele faz muito mais do que guardar mudanças temporariamente — e a maioria dos devs usa só 20% do que ele oferece.


O básico que você provavelmente já sabe

git stash
git stash pop

O primeiro joga suas mudanças num "armário" temporário e limpa o working directory. O segundo traz de volta. Simples.

Mas tem um detalhe que pega bastante gente no começo:

⚠️ Atenção: Por padrão, git stash não salva arquivos untracked — ou seja, arquivos novos que você ainda não adicionou com git add. Para incluí-los, use git stash -u (ou --include-untracked).

# ❌ Esquece os arquivos novos
git stash

# ✓ Salva tudo, incluindo untracked
git stash -u

Se você criou um arquivo novo e fez git stash sem o -u, abriu outro terminal e não encontrou o arquivo — esse era o motivo.


O que a maioria ignora: stash tem pilha

Cada vez que você executa git stash, o Git empilha as mudanças. É uma estrutura LIFO — o último que entrou é o primeiro a sair.

git stash list

Saída típica:

stash@{0}: WIP on feature/pagamento: 3a1b2c4 adiciona validacao de cpf
stash@{1}: WIP on feature/pagamento: 3a1b2c4 adiciona validacao de cpf
stash@{2}: WIP on main: f9e8d7c corrige typo no readme

Três stashes acumulados. git stash pop vai pegar só o {0}. Para aplicar um específico:

git stash apply stash@{2}

A diferença entre pop e apply: o pop aplica e remove da lista. O apply só aplica, mantém na pilha. Use apply quando não tiver certeza se vai funcionar — é mais seguro.


Stash com nome: pare de adivinhar o que salvou

Olhar WIP on feature/pagamento três vezes na lista não ajuda ninguém. Dê um nome descritivo:

git stash push -m "validacao de cnpj incompleta, falta regex"

Agora o git stash list fica legível:

stash@{0}: On feature/pagamento: validacao de cnpj incompleta, falta regex
stash@{1}: On main: ajuste de layout mobile sem testar no safari

Parece detalhe. Mas quando você volta depois de dois dias e tem quatro stashes na lista, a diferença é enorme. Isso apareceu num PR meu certa vez — o revisor perguntou por que eu tinha três stashes com o mesmo nome e não sabia o que cada um continha. Boa pergunta.


Salvar só parte das mudanças

Você modificou cinco arquivos, mas só quer guardar três deles no stash. Dá para fazer isso:

git stash push -m "minha descricao" -- src/components/Pagamento.tsx src/utils/cpf.ts

Ou, para uma seleção interativa (hunk a hunk, igual ao git add -p):

git stash -p

O Git vai perguntar para cada bloco de mudança se você quer incluir no stash ou não. É lento, mas preciso.

💡 Dica: git stash -p é especialmente útil quando você misturou mudanças de duas tarefas diferentes no mesmo arquivo por descuido. Você consegue separar sem perder nada.


Stash em branches diferentes

Aqui mora um uso poderoso que pouca gente conhece: git stash branch.

Cenário: você fez um stash na main, mas ao tentar aplicar percebe que vai gerar conflito porque a branch mudou muito. Em vez de resolver conflito na mão, você cria uma branch nova direto do stash:

git stash branch feature/nova-branch stash@{0}

O que acontece:

  1. O Git cria a branch feature/nova-branch a partir do commit onde o stash foi criado
  2. Aplica as mudanças do stash automaticamente
  3. Remove o stash da pilha se der certo

Sem conflito. O contexto é o mesmo de quando você salvou. Isso é especialmente útil quando você percebe que o que estava fazendo merecia uma branch própria desde o início.


Erros comuns que vão te custar tempo

1. Abandonar o stash e esquecer

Devs acumulam stashes antigos e nunca limpam. Para ver o que tem:

git stash list

Para remover um stash específico:

git stash drop stash@{1}

Para limpar tudo de uma vez:

git stash clear

⚠️ Atenção: git stash clear não tem confirmação. Ele apaga tudo silenciosamente. Não tem undo. Use com cuidado.

2. Confundir pop com apply em situação de conflito

Se o git stash pop gerar conflito, o stash ainda é removido da pilha. Você resolve o conflito, mas o stash sumiu. Se algo der errado no processo, não tem como recuperar facilmente.

Prefira apply quando estiver inseguro. Depois que tudo estiver certo, remove manualmente com drop.

# ❌ Arriscado em situação incerta
git stash pop

# ✓ Mais seguro
git stash apply stash@{0}
# (resolve conflitos se houver)
git stash drop stash@{0}

3. Stash não salva mudanças em staged

Errado. O stash salva tanto mudanças staged quanto unstaged por padrão. Se quiser salvar só as unstaged e manter as staged intactas:

git stash --keep-index

Útil quando você quer commitar só parte e guardar o resto.


FAQ

O stash some se eu trocar de branch?

Não. O stash é global no repositório, não pertence a nenhuma branch específica. Você pode criar o stash na feature/x e aplicar na main sem problema — desde que não haja conflito.

Posso ver o diff do que está no stash antes de aplicar?

Sim. Use:

git stash show -p stash@{0}

O -p mostra o patch completo. Sem ele, você vê só o resumo de quais arquivos foram alterados.

O stash é compartilhado com o repositório remoto?

Não. O stash é local. Ninguém mais vê o que você guardou. Se você precisar compartilhar trabalho incompleto, use um commit em uma branch temporária — é mais explícito e rastreável.

Dá para recuperar um stash depois de git stash clear?

Tecnicamente sim, mas não é trivial. O Git mantém os objetos por um tempo antes do garbage collection. Você pode tentar:

git fsck --unreachable | grep commit | awk '{print $3}' | xargs git log --oneline --no-walk

Mas não conte com isso. Trate git stash clear como irreversível.

Stash funciona com submódulos?

Por padrão, não. O stash ignora mudanças em submódulos. Para incluí-los, é necessário tratar separadamente dentro de cada submódulo.


Próximos passos

Se você usava só git stash e git stash pop, agora tem pelo menos seis novos recursos para experimentar hoje:

ComandoQuando usar
git stash -uQuando tem arquivos novos não tracked
git stash push -m "desc"Sempre — pare de deixar stash sem nome
git stash listAntes de qualquer pop com pilha acumulada
git stash applyQuando estiver inseguro sobre conflitos
git stash -pPara salvar só partes específicas do código
git stash branch nomePara transformar um stash em branch nova

O stash não substitui commits, branches ou PR drafts para trabalho colaborativo. Mas para o fluxo individual, o dia a dia de interrupções e contextos trocados, ele é uma das ferramentas mais subestimadas do Git.

Use com nome. Use com intenção. Seu futuro você vai agradecer.