Para trabalhar em uma segunda branch sem interferir no checkout atual do seu projeto no Mac, crie um Git worktree em uma pasta vizinha. Cada worktree tem seus próprios arquivos e branch em checkout, enquanto compartilha os dados do repositório com o checkout principal. Crie-o a partir do Terminal, abra sua pasta no Finder ou em seu editor e remova-o com o Git quando terminar. Documentação do worktree do Git

O que um worktree muda

Um worktree oferece outro diretório de trabalho conectado ao mesmo repositório Git. Isso significa que você pode manter, por exemplo, o checkout atual da main aberto enquanto uma branch de funcionalidade (feature branch) fica em uma pasta e com arquivos separados. As alterações em um diretório de trabalho não sobrescrevem os arquivos em checkout do outro. O Git compartilha os dados do repositório, mas mantém separados os estados específicos do worktree, como o índice e o HEAD. Git: git-worktree

As branches são compartilhadas entre os worktrees, e normalmente uma branch local não pode estar em checkout em dois worktrees ao mesmo tempo. Os worktrees são adequados para tarefas separadas e simultâneas; eles não são clones independentes do repositório. Arquivos ignorados pelo Git, como configurações locais ou saídas de compilação (build), podem precisar ser criados separadamente na nova pasta.

Criar um worktree de funcionalidade no macOS

Abra o Terminal e navegue até o diretório do seu projeto existente. Substitua my-app pelo nome do diretório do seu repositório. O exemplo pressupõe que ele esteja em ~/Projects/my-app e cria o novo checkout ao lado dele.

cd ~/Projects/my-app
git status --short
git worktree add -b feature/search-ui ../my-app-search-ui

O comando de status permite que você veja se o checkout atual tem alterações pendentes antes de mudar de contexto. O comando add -b cria uma nova branch local chamada feature/search-ui e faz o checkout dela no diretório vizinho my-app-search-ui. O Git cria uma branch a partir do HEAD atual quando nenhum commit inicial é especificado. Escolha uma branch exclusiva e um caminho de destino que ainda não esteja em uso. Git: worktree add

Para uma branch local existente que não esteja em checkout em outro worktree, use o nome dela em vez de -b e um novo nome de branch:

git worktree add ../my-app-search-ui existing-branch

Se a branch já estiver em checkout em outro lugar, o Git recusará por padrão. Não force apenas para burlar essa proteção; use uma branch diferente ou trabalhe no checkout que já a contém. Para criar um worktree para uma branch remota, faça o fetch do repositório remoto primeiro, se necessário, e siga o comportamento de tracking-branch do Git; verifique o nome da branch antes de adicioná-la.

Abrir o novo checkout no Finder e no seu editor

No Finder, navegue até a pasta pai que contém os dois diretórios de projeto e abra my-app-search-ui. Você pode usar o comando Ir para Pasta do Finder (Shift-Command-G) e digitar o caminho completo, como ~/Projects/my-app-search-ui. Mantenha o nome do diretório visível no Finder ou no seu editor para que você possa distingui-lo do checkout original.

A Apple também documenta como abrir o Terminal em uma pasta selecionada a partir do Finder: exiba a Barra de Caminho com Visualizar > Mostrar Barra de Caminho, clique com a tecla Control pressionada na pasta na Barra de Caminho e escolha Abrir no Terminal. Para abrir outra janela ou aba do Terminal, use Command-N ou Command-T. O local da pasta selecionada se torna o diretório de trabalho para a ação do Finder. Apple: Abra novas janelas e abas do Terminal no Mac

Abra a nova pasta como um projeto separado no seu editor usando o controle documentado de abertura de pasta desse editor. O comportamento do editor varia; os Git worktrees não criam janelas de editor automaticamente nem configuram seu ambiente de desenvolvimento. Diretórios de dependências, arquivos ignorados, arquivos de ambiente local e serviços em execução podem exigir configuração separada em cada checkout.

Verificar qual checkout você está usando

A partir de qualquer um dos diretórios de projeto, execute:

git worktree list

O Git lista o worktree principal e os worktrees vinculados, incluindo seus caminhos e as branches em checkout. Antes de fazer commits ou executar comandos que alterem arquivos, confirme a pasta atual ou execute git status nela. Essa verificação simples ajuda a evitar o erro comum de fazer edições no checkout original quando a intenção era trabalhar no novo. Git: worktree list

Remover um worktree quando a tarefa for concluída

Primeiro, faça o commit ou preserve de outra forma qualquer trabalho necessário. Em seguida, a partir de qualquer worktree pertencente ao repositório, remova o checkout vinculado pelo caminho:

git worktree remove ../my-app-search-ui
git worktree list

Normalmente, o Git se recusa a remover um worktree que contenha arquivos rastreados modificados ou arquivos não rastreados. Revise e preserve esses arquivos antes da remoção; --force ignora a proteção do Git e pode descartar o trabalho feito. O comando remove o diretório do worktree, portanto, não o use como substituto para verificar o que está dentro dele. Depois de removida, a branch continuará disponível no repositório, a menos que seja excluída separadamente. Git: worktree remove

Se você excluiu uma pasta de worktree manualmente, o Git pode manter seu registro administrativo. Use git worktree prune para limpar registros obsoletos; dê preferência ao git worktree remove para uma limpeza normal. Se você mover um checkout vinculado no Finder, o Git pode perder o controle de sua localização; use git worktree move onde aplicável ou git worktree repair para reconectá-lo. Git: worktree prune, move e repair

Uma configuração prática no Mac é ter uma pasta de worktree por tarefa ativa, com nomes curtos e reconhecíveis de pastas e branches. Mantenha o checkout principal para o trabalho atual, crie um checkout irmão para uma tarefa paralela e verifique o caminho antes de editar. Isso dá a cada tarefa seus próprios arquivos de projeto sem a necessidade de alternar repetidamente a branch do checkout original.

Fontes