git stash — Mais do que um salvamento de emergência (Stash parcial, Stashes nomeados e o resto)
Além da salvação da panique: estoures nomeadas, lista de estoures, mostrar -p, estoure parcial com --patch, aplicar versus pop e a dificuldade com arquivos não rastreados que você enfrentará eventualmente.
Você aprendeu git stash em pânico. Alguém pingou você no meio de uma funcionalidade, você precisou mudar de ramo imediatamente, e o stash foi a saída mais rápida. Salvou o dia.
Então você tinha três stashes, esqueceu o que estava dentro deles, colocou o errado no ramo errado e decidiu que o stash estava quebrado. Ele não está quebrado. Você só precisa de algumas mais comandos.
Os arquivos não rastreados te pegaram (leia isso primeiro)
git stash salva apenas arquivos rastreados — arquivos já conhecidos pelo git. Arquivos novos que não foram estagados ficam invisíveis para ele.
# You created a new file mid-feature
echo "temp work" > new-feature.js
git stash
# new-feature.js is still sitting there — stash ignored it entirely
Adicionar -u para incluir arquivos não rastreados:
git stash push -u
Há também -a (--all) que inclui arquivos ignorados também. Isso quase nunca é o que você quer — ele vai stacher suas node_modules alterações e .env arquivos e tornará a restauração uma nightmare.
Dê um nome aos stashes antes de se arrepender
A mensagem padrão do stash é:
stash@{0}: WIP on main: a3f1c2d Update dependencies
Isso é sem significado quando você tem três stashes de três diferentes recursos parcialmente concluídos. Use git stash push -m para nomeá-los:
git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"
Agora git stash list é realmente legível:
stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow
Aplicar um específico por índice:
git stash apply stash@{2} # brings back the auth work
Inspeccionar antes de aplicar: stash show -p
git stash show dá um resumo dos arquivos alterados. Adicione -p para a diferença completa:
git stash show -p stash@{2}
Este é o comando que a maioria das pessoas pula e depois se arrepente. Sem ele, você está restaurando mudanças de forma cega sobre um ramo que pode ter mudado significativamente desde que você fez o stash. Um rápido show -p leva dez segundos e diz exatamente o que você está prestes a aplicar.
Se você quiser comparar a diferença do stash com o estado atual de um arquivo lado a lado, cole ambos no Comparação de texto ferramenta — mais rápido do que organizar git diff stash@{N}..HEAD -- path/to/file na sua cabeça.
Aplicar vs pop: uma diferença que realmente importa
Ambos os comandos restauram seu stash. Uma diferença crítica:
git stash pop= aplicar + excluir a entrada do stashgit stash apply= aplicar, manter a entrada do stash
Se você pop e encontrar um conflito de fusão, o git descarta a entrada do stash antes de você resolver qualquer coisa. Agora você tem uma árvore de trabalho conflitante e nenhum ponto de referência do stash para cair de volta.
apply mantém a entrada enquanto resolve o conflito, depois você limpa manualmente:
# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0} # explicit cleanup once you're happy
O extra drop passo vale a pena quando o stash representa horas de trabalho.
Stash parcial com –patch
Às vezes você só quer stacher parte das suas alterações. Você tem uma correção de bug e metade de uma nova funcionalidade no mesmo arquivo, e quer commitar a correção enquanto stacher o código da funcionalidade.
git stash push --patch (ou -p) abre uma sessão interativa por hunk:
git stash push -p -m "wip: new feature half"
Para cada hunk, você recebe a mesma y/n/s/q interface que git add -p. Digite s para dividir um hunk em pedaços menores se o auto-split do git não for suficientemente granular. É mais lento do que um stash simples, mas é a maneira mais limpa de dividir uma árvore de trabalho suja sem criar um ramo descartável.
Uma pegada: --patch modo não inclui arquivos não rastreados, então não pode ser combinado com -u. Se você tiver arquivos novos não rastreados que fazem parte da funcionalidade que está sendo stacher, você precisará git add eles primeiro para torná-los rastreados, depois execute o stash parcial.
Casos reais de uso
Mudança de contexto no meio de uma funcionalidade. Um revisor deixa feedback urgente em outro PR enquanto você está profundamente imerso em código não concluído. Stash com um nome, mude de ramo, faça a revisão, volte e pop. Sem commits WIP, sem gymnastics de ramo.
git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop
Verificação de uma execução limpa dos testes. Você quer confirmar que seus testes passam em uma árvore de trabalho limpa — não com suas alterações parcialmente concluídas acidentalmente se espalhando no ambiente de teste:
git stash push -u
npm test # or pytest, cargo test, whatever
git stash pop
Isso detecta o caso em que os testes passam apenas devido a modificações locais. Isso acontece mais frequentemente do que você imagina em repositórios com fixtures de teste compartilhados.
Mudança de ramo com uma árvore de trabalho conflitante. O git recusa a checkout de um ramo quando sua árvore de trabalho tem mudanças que seriam sobrescritas. Stash primeiro, mude de ramo, unstash. Mais rápido do que git commit --fixup apenas para mudar de ramo.
ficha de atalhos do git stash
| Comando | O que faz |
|---|---|
git stash push | Stash alterações rastreadas (abreviação: git stash) |
git stash push -u | Inclui arquivos não rastreados |
git stash push -m "name" | Stash com um nome descritivo |
git stash push -u -m "name" | Arquivos não rastreados + nomeado (a combinação que você usará mais) |
git stash push -p | Stash parcial interativo (por hunk) |
git stash list | Lista todos os stashes |
git stash show stash@{N} | Resumo dos arquivos alterados em um stash |
git stash show -p stash@{N} | Diferença completa de um stash |
git stash apply stash@{N} | Aplica um stash, mantém a entrada |
git stash pop | Aplica o stash mais recente, exclui a entrada |
git stash drop stash@{N} | Exclui uma entrada específica de stash |
git stash clear | Exclui todas as entradas de stash |
git stash branch <branchname> | Cria um novo ramo a partir de um stash e aplica |
A saída de escape do ramo de stash
Um outro comando que vale a pena conhecer: git stash branch <branchname>. Isso cria um novo ramo no commit onde você stacher, aplica o stash e o descarta se a aplicação for limpa. É a melhor escolha quando suas alterações stacher cresceram suficientemente para merecerem seu próprio ramo — e evita completamente o problema de conflito porque você está reproduzindo o stash exatamente na árvore de onde veio.
O hábito que resolve 90% de dor com stash: nomeie tudo com -m, e use apply em vez de pop até ficar confiante de que as alterações se integraram de forma limpa. O extra drop passo custa dois segundos. Perder um stash que precisava custa muito mais.
Você também pode gostar
Instale nossas extensões
Adicione ferramentas de IO ao seu navegador favorito para acesso instantâneo e pesquisa mais rápida
恵 O placar chegou!
Placar é uma forma divertida de acompanhar seus jogos, todos os dados são armazenados em seu navegador. Mais recursos serão lançados em breve!
Ferramentas essenciais
Ver tudo Novas chegadas
Ver tudoAtualizar: Nosso ferramenta mais recente Foi adicionado em 15 de junho de 2026
