O Git Worktree permite trabalhar com múltiplas branches do mesmo repositório simultaneamente, cada uma em um diretório diferente.
Isso é útil, por exemplo, para manter uma branch de desenvolvimento aberta enquanto trabalha em outra branch sem precisar ficar fazendo
git checkout/git switchconstantemente.
git worktree add # adiciona um novo worktree ao repositório
git worktree remove # remove um worktree
git worktree prune # remove informações de worktrees que não existem mais no sistema de arquivos
git worktree lock # bloqueia um worktree para impedir que ele seja removido ou podado automaticamente
git worktree unlock # remove o bloqueio de um worktree
git worktree list # lista todos os worktrees associados ao repositório.
git worktree move # move um worktree para outro diretório.
git worktree repair # corrige referências de worktrees quando os caminhos registrados pelo Git ficaram inconsistentes.git worktree add <path> <branch><path> - diretório onde o novo worktree será criado.
git worktree add ../feature-login feature/login<branch> - branch que será utilizada no novo worktree.
git worktree add ../feature-login feature/login-b <new-branch> - cria uma nova branch e já adiciona o worktree utilizando essa branch.
git worktree add -b feature/login ../feature-login-B <new-branch> - cria ou redefine a branch informada e adiciona o worktree.
git worktree add -B feature/login ../feature-login--detach - cria o worktree sem associá-lo a uma branch.
git worktree add --detach ../teste--force - permite criar um worktree mesmo quando o Git normalmente impediria a operação, como em algumas situações em que a branch já está associada a outro worktree.
git worktree add --force ../feature-login feature/logingit worktree remove <worktree>Exemplo:
git worktree remove ../feature-login--force - força a remoção do worktree, inclusive quando existem alterações não commitadas.
git worktree remove --force ../feature-loginA remoção do worktree não remove a branch associada a ele.
git worktree prunePor exemplo, se um diretório de worktree foi apagado manualmente:
rm -rf ../feature-loginO Git ainda pode manter informações sobre esse worktree. O prune limpa essas referências.
-n / --dry-run - mostra o que seria removido sem executar a remoção.
git worktree prune --dry-run-v / --verbose - exibe informações adicionais durante a limpeza.
git worktree prune --verbosegit worktree lock <worktree>--reason <string> - adiciona uma justificativa para o bloqueio.
git worktree lock --reason "Worktree utilizado para desenvolvimento" ../feature-loginO motivo pode ser visualizado posteriormente com:
git worktree listgit worktree unlock <worktree>Exemplo:
git worktree unlock ../feature-logingit worktree listExemplo de saída:
/home/dev/projeto abc1234 [main]
/home/dev/projeto-dev def5678 [dev]
/home/dev/projeto-fix 987abcd [feature/fix]
--porcelain - exibe as informações em um formato mais detalhado e estruturado.
git worktree list --porcelain-v / --verbose - exibe informações adicionais.
git worktree list --verbosegit worktree move <worktree> <new-path>Exemplo:
git worktree move ../feature-login ../loginIsso altera o caminho registrado pelo Git sem precisar remover e recriar o worktree.
git worktree repairTambém pode ser utilizado informando caminhos específicos:
git worktree repair <path>É especialmente útil depois de mover manualmente um diretório ou alterar a localização do repositório principal.
existe um projeto:
projeto/
E você esteja trabalhando na branch main.
Para criar um worktree para a branch dev:
git worktree add ../projeto-dev devA estrutura ficará:
projeto/
└── ...
projeto-dev/
└── ...
Agora é possível trabalhar simultaneamente:
projeto/ → main
projeto-dev/ → dev
Cada diretório possui seu próprio estado de trabalho, mas ambos utilizam o mesmo repositório Git.
Para visualizar:
git worktree listPara remover quando terminar:
git worktree remove ../projeto-dev# Criar worktree
git worktree add ../projeto-dev dev
# Listar worktrees
git worktree list
# Trabalhar normalmente
cd ../projeto-dev
# Voltar ao projeto principal
cd ../projeto
# Remover o worktree
git worktree remove ../projeto-dev
# Limpar referências antigas, se necessário
git worktree pruneUma explicação dos conceitos e dos principais comandos do Git Worktree: Ver explicação teórica
Exemplo prático utilizando um pequeno projeto em Python para demonstrar o uso do Worktree em uma situação real de desenvolvimento: Ver explicação prática
Pequeno sistema desenvolvido em Python utilizado nos exemplos práticos: Ver projeto
