git stash e worktree: trocando de contexto sem perder trabalho
Alguém pede um hotfix urgente no meio de uma mudança inacabada — dá pra pausar sem commitar lixo nem perder nada.
Você está no meio de uma mudança que não compila ainda, e alguém pede pra corrigir um bug urgente em main agora. Trocar de branch com arquivos modificados nem sempre funciona — o git recusa o checkout se a mudança colidiria com o que já existe na outra branch. Commitar "pra guardar" cria um commit incompleto que você depois precisa desfazer. Existe uma terceira opção.
git stash — guarda as mudanças de lado, sem commitar
git stashIsso pega todas as mudanças não commitadas (arquivos já rastreados) e guarda numa pilha separada, deixando sua branch limpa — como se você nunca tivesse mexido em nada. Agora dá pra trocar de branch, resolver o hotfix, e voltar depois.
git checkout feature/checkout
git stash pop # traz de volta as mudanças guardadas E remove da pilhaArquivos novos (untracked) não entram no stash por padrão
git stash sozinho ignora arquivos que você criou mas nunca deu git add — eles continuam ali, sem serem guardados. Se a mudança pausada incluir arquivo novo, use --include-untracked.
git stash --include-untracked
# ou, abreviado:
git stash -ulist, pop e apply — a diferença que confunde
git stash list # mostra tudo que está guardado — dá pra ter vários stashes ao mesmo tempogit stash pop aplica o stash mais recente e apaga ele da pilha. git stash apply aplica sem apagar — útil quando você quer levar a mesma mudança pra mais de uma branch, ou quer ter certeza de que aplicou certo antes de descartar o backup.
git worktree — duas branches ao vivo, sem clonar de novo
Stash resolve pausar rapidamente. Mas às vezes você quer literalmente trabalhar em duas branches ao mesmo tempo — rodar o app numa versão enquanto edita código em outra, sem ficar trocando de branch e reinstalando dependências toda hora. git worktree cria uma segunda pasta, ligada ao mesmo repositório .git, cada uma numa branch diferente.
git worktree add ../projeto-hotfix hotfix/loginAgora ../projeto-hotfix é uma pasta separada no disco, com seus próprios arquivos, na branch hotfix/login — mas compartilhando o mesmo histórico e configuração do repositório original. Não precisa clonar de novo, não duplica o .git inteiro.
git worktree remove ../projeto-hotfixExercício
Você está com 2 arquivos modificados (já rastreados) e 1 arquivo novo (untracked) na branch feature/relatorio. Precisa trocar pra main agora e levar as 3 mudanças guardadas, incluindo a nova. Qual comando roda?