Já ouviu falar de git worktree?

Você está trabalhando em uma feature e, de repente, precisou parar para resolver um problema em produção. Esse é um dos desafios do cotidiano de um programador. Há um longo tempo, eu utilizava o `git stash`, seguido de um `git checkout` ou `git switch` para trocar de branch, e depois um `git stash pop` para restaurar minhas mudanças. Mas existe uma maneira melhor de fazer isso.

🚀 O que é o Git Worktree?

O git worktree é um recurso do Git, lançado em 2015, que permite criar diretórios separados para diferentes branches do mesmo repositório. Ele é muito útil para trabalhar em várias features ou revisões sem precisar alternar constantemente entre branches.

Atenção: Verifique se você está em uma branch separada, caso contrário, receberá um erro ao tentar fazer checkout da main enquanto já estiver nela.

🔧 Cenário de Uso: Trabalhando em uma Feature e Chega um Hotfix

Imagine que você está desenvolvendo uma feature e, de repente, chega uma nova demanda urgente de hotfix. Vamos criar uma nova branch para a feature atual:

git checkout -b feature-02-2025

Agora, suponha que um bug crítico foi identificado e precisa ser corrigido imediatamente. O bug foi registrado como 022025.

📌 Criando um Worktree para o Hotfix

Podemos criar um diretório separado para trabalhar no hotfix sem interromper nossa feature atual:

git worktree add ../hotfix-022025 main

Isso criará um novo diretório chamado hotfix-022025, que estará vinculado à branch main.

Nota: O uso de ../ no comando acima faz com que o Git crie a cópia do repositório fora do diretório atual, evitando um problema conhecido como boneca russa, onde um repositório Git é criado dentro de outro e assim sucessivamente.

Agora, saia do diretório atual e liste os arquivos para verificar se o novo diretório foi criado:

cd ..
ls -la

Saída esperada no terminal:

drwxr-xr-x     - jsjunior 13 Dec  2024 app
drwxr-xr-x@    - jsjunior 10 Feb 20:28 hotfix-022025

Agora entre no diretório do hotfix:

cd hotfix-022025

Você verá que este diretório é essencialmente um clone do seu repositório principal na branch main. Agora você pode trabalhar no seu hotfix, fazer commits, abrir um Pull Request e, após a correção, remover o worktree criado.

🧹 Limpando o Worktree Após o Hotfix

Depois de finalizar o hotfix e fazer o merge, você pode remover o worktree para manter o ambiente organizado.

Saia do diretório do worktree:

cd ..

Volte para o seu diretório original (app, no meu caso):

cd app

Agora, remova o worktree criado:

git worktree remove ../hotfix-022025

Isso limpará o diretório e removerá a referência ao worktree.


🎯 Conclusão

O git worktree é uma ferramenta extremamente útil para lidar com múltiplas branches sem precisar alternar constantemente entre elas. Isso facilita o fluxo de trabalho, melhora a produtividade e reduz o risco de conflitos e erros.

Espero que essa dica tenha sido útil! 🚀

Por: J.S.Júnior