Em times ágeis, a rotina raramente é linear.
Você inicia o desenvolvimento de uma feature relevante, está imerso no problema, e então surge um hotfix em produção, um ajuste solicitado pelo PO ou um bug crítico reportado pelo suporte.
Trocar de contexto é parte natural do trabalho. A diferença entre um fluxo saudável e um ambiente caótico está em como essa troca é feita sem comprometer a base de código.
Neste artigo, apresento duas abordagens para lidar com esse cenário usando Git: git stash e git worktree. Ambas resolvem o problema, mas em níveis diferentes de maturidade e robustez.
Git Stash e Pop: a solução básica para pausas rápidas
O git stash permite salvar temporariamente alterações locais que ainda não foram commitadas, limpando o diretório de trabalho para que você possa mudar de branch.
Cenário típico
Você está trabalhando em:
feature/pagamentos-recorrentes
Ainda há alterações não finalizadas. Surge um hotfix urgente na main.
Fluxo possível:
git stash push -m "WIP: pagamentos recorrentes"
git checkout main
git pull
git checkout -b hotfix/correcao-timeout
Depois de concluir o hotfix:
git checkout feature/pagamentos-recorrentes
git stash pop
As alterações retornam ao estado anterior.
Pontos fortes do stash
- Simples e rápido
- Resolve interrupções curtas
- Não exige estrutura adicional
Limitações importantes
O git stash é uma solução mais básica. Funciona bem para pausas breves, mas apresenta limitações quando usado com frequência:
- Pode gerar conflitos ao aplicar
- Não é adequado para múltiplos contextos paralelos
- Pode virar um acúmulo desorganizado de alterações salvas
- Não isola ambientes de execução
Em ambientes onde interrupções são constantes, existe uma abordagem mais robusta.
Git Worktree: múltiplos contextos simultâneos com isolamento real
O git worktree permite criar múltiplos diretórios de trabalho para o mesmo repositório, cada um apontando para uma branch diferente.
Em vez de salvar alterações e alternar branches, você trabalha em contextos fisicamente separados, compartilhando o mesmo histórico Git.
Exemplo prático
Você está desenvolvendo:
feature/nova-api-pix
Surge um hotfix urgente.
Em vez de usar stash:
git worktree add ../repo-hotfix main
cd ../repo-hotfix
git checkout -b hotfix/erro-calculo
Agora você tem dois diretórios independentes:
/projetocom a feature em andamento/repo-hotfixcom o hotfix
Você pode abrir duas IDEs, rodar dois conjuntos de testes ou containers diferentes, sem qualquer risco de misturar alterações.
Após finalizar:
git worktree remove ../repo-hotfix
Por que worktree é mais robusto
O git worktree oferece:
- Isolamento real de contexto
- Eliminação da necessidade de stash em muitos casos
- Redução significativa de conflitos
- Organização mais clara das tarefas paralelas
- Melhor aderência a fluxos com CI/CD estruturado
- Histórico mais limpo e previsível
Enquanto o stash é uma solução tática, o worktree é uma solução estrutural.
Estratégia recomendada em ambientes ágeis
Interrupções rápidas, de curta duração Use git stash.
Demandas paralelas mais estruturadas, hotfixes frequentes ou múltiplas frentes de desenvolvimento Use git worktree.
Times que lidam com produção ativa, múltiplas releases e integração contínua tendem a se beneficiar mais do worktree, pois ele reduz risco operacional e aumenta a previsibilidade.
Conclusão
Em desenvolvimento ágil, produtividade não significa apenas escrever código rapidamente. Significa gerenciar contexto com disciplina.
O git stash é uma ferramenta útil e básica para pausas rápidas. Já o git worktree representa um nível mais avançado de organização, oferecendo isolamento, clareza e robustez para quem precisa alternar entre múltiplas frentes com frequência.
Dominar essa diferença demonstra maturidade em engenharia de software e cuidado com a manutenção da base de código.
Se sua rotina envolve hotfixes constantes e múltiplas features em paralelo, provavelmente é hora de evoluir do stash para o worktree.
Por hoje é isto ...
Artus