Últimos Posts del Blog

🎵 Podcast en Spotify

Buenas ! Olha... Se você é desenvolvedor, já passou por isso: está no meio de uma feature complexa, com metade dos arquivos alterados, e surge aquele bug crítico em produção que precisa de um fix para ontem. A saída clássica ? Usar o git stash, mudar de branch, torcer para o ambiente não quebrar e, depois, tentar lembrar onde você parou. Mas e se eu te dissesse que você pode simplesmente abrir uma nova pasta e ter outra branch rodando em paralelo, usando o mesmo repositório ?

É exatamente isso que o Git Worktree faz. Em vez de ter um único diretório de trabalho, ele permite que você tenha múltiplas árvores de trabalho vinculadas a um único banco de dados de objetos. Basicamente, você economiza espaço em disco e evita o custo cognitivo (aqueles 23 minutos que levamos para focar de novo) de ficar alternando contextos na mesma pasta.

A mágica acontece na arquitetura: o Git mantém um repositório principal e cria instâncias vinculadas. O banco de dados de commits e o histórico são compartilhados através do $GIT_COMMON_DIR, mas cada pasta tem seu próprio HEAD e seu próprio índice de preparo (staging area). Isso significa que o que você adiciona no git add de uma pasta não vaza para a outra. Funciona !

Mas atenção para a "regra de ouro": você não pode ter a mesma branch ativa em duas pastas diferentes ao mesmo tempo. O Git trava isso para evitar que os ponteiros fiquem malucos e você perca código. Se precisar muito olhar o mesmo histórico em dois lugares, a dica é usar o modo Detached HEAD ou criar uma branch temporária.

Para quem quer o "estado da arte", a recomendação é usar a topologia Bare. Você clona o repositório com --bare, o que cria um hub central sem arquivos visíveis, e a partir dele você cria suas worktrees em pastas laterais (ex: uma pasta /main, outra /feature-x). Isso mantém tudo organizado e evita que o .gitignore vire uma bagunça de caminhos relativos.

Até para quem está no hype dos Agentes de IA, como o Claude Code, o worktree é um superpoder. Você pode deixar um agente trabalhando em uma branch de refatoração em uma pasta enquanto você resolve a lógica de negócio em outra, sem que um sobrescreva o arquivo que o outro está lendo. hehe, a produtividade vai lá no teto.

Para fechar, não esqueça da manutenção. Se deletar uma pasta manualmente, use o git worktree prune para limpar as referências "zumbis" no banco de dados. E se estiver lidando com submódulos, cuidado: a integração ainda é meio instável e pode duplicar arquivos desnecessariamente.

Quer começar agora ? Tenta aí no seu terminal: git worktree add ../correcao-rapida main. Você vai ver como é libertador não precisar mais dar stash em tudo !

Fontes:

  • Documentação oficial do Git (git-scm.com).
  • "Git Worktree: Manage Git Workflow Efficiently" - DevDynamics.
  • "Git Worktrees are a SuperPower for Agentic Dev" - Reddit/ClaudeCode.