Git worktree
Em uma empresa que trabalhei, às vezes eu estava no meio de uma feature, chegava uma nova demanda urgente ou um pedido de ajuda, e começava o ritual. git stash, troca de branch, resolve o que precisava, volta, git stash pop. Ou o clássico git commit -m "wip" && git push origin HEAD para marcar o lugar e depois um git rebase -i para limpar o histórico.
No momento que eu aprendi o git worktree, lembrei de um colega de lá, o Ronaldo. Sempre que precisava pausar e mudar de contexto, e caso não fosse urgente, Ronaldo dizia que estava “com coisas agora para commitar”. Cheguei a mostrar o workflow com stash, mas não colou. Na real, eu usava muito mais git commit -m "wip" && git push origin HEAD com git rebase (git rebase é top), e não tive uma boa didática para explicar rebase (em backlog).
Resumindo, o que eu precisava era uma forma de trocar de contexto sem interromper o que estava no meio.
O git worktree facilita tudo isso em comandos simples:
# cria um worktree para uma nova branch
git worktree add ../ex-corp-proj-bugfix -b fix/bug-urgente && cd ../ex-corp-proj-bugfix
Cria uma pasta separada para mexer em um commit/branch/tag específica, em paralelo com a branch atual. A pasta compartilha o mesmo .git, então commits e histórico ficam sincronizados.
Quando o bugfix for finalizado, basta usar o git worktree remove.
# remove depois que terminar
git worktree remove ../ex-corp-proj-bugfix
Para listar os worktrees ativos, tem o git worktree list.
# lista worktrees ativos
git worktree list
Outro cenário útil: ajudar um colega sem sair da sua branch. Basta apontar o worktree para o commit ou branch dele, abrir numa pasta separada, e olhar o código sem tocar no que estava fazendo.
Sem stash, sem WIP commit, sem rebase para limpar. Você abre outra pasta, resolve, fecha, e sua branch está intacta. Se eu tivesse conhecido antes, teria apresentado pro Ronaldo assim: “é como abrir outra aba no browser, só que pra branch”.
Gotchas: a documentação avisa que repositórios com submodules têm problemas com worktree. Se o seu projeto usa submodules, vale testar antes de confiar.