O comando básico
A resposta curta e direta é que o comando principal para alternar entre branches no Git é o git checkout. Existe também uma versão mais recente, o git switch, que foi introduzida especificamente para esse propósito a partir do Git 2.23. Ambos fazem o trabalho, mas o comportamento não é idêntico em todas as situações.
qual comando do git podemos utilizar para alternar entre branches
A pergunta aparece com frequência em fóruns e listas de discussão, e a maioria das respostas aponta para o git checkout mesmo. Eu uso os dois comandos no dia a dia, dependendo do contexto, e tenho meus motivos para isso. Vou explicar como eles funcionam na prática, não apenas na teoria dos manuais. Quando você roda git checkout nomedobranch, o Git faz três coisas em sequência: primeiro atualiza o índice (o staging area), depois modifica os arquivos de trabalho conforme necessário e, por fim, altera o HEAD para apontar para o branch solicitado. Isso significa que um único comando pode ter efeitos colaterais significativos, especialmente se houver mudanças não commitadas no repositório.
O git switch, por outro lado, é mais restritivo. Ele só alterna entre branches e não tenta fazer rebase ou reset automático. Se você tiver mudanças não confirmadas, o git switch simplesmente recusa a alternância e mostra um erro claro. Isso pode parecer limitante à primeira vista, mas na prática evita que você perca trabalho acidentalmente durante uma troca de branch. Eu tive um caso específico no qual precisei alternar rapidamente de um branch de desenvolvimento para um branch de hotfix em produção. O repositório tinha modificações em arquivos de configuração que eu ainda não havia commitado. Usei o git checkout para ir para o branch de hotfix e, ao voltar depois, percebei que as mudanças haviam sido embarcadas inadvertidamente no novo branch. Perdi cerca de 40 minutos tentando reconstruir o estado original. Desde então, sempre verifico se há mudanças pendentes antes de usar o git checkout para alternar de branch.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Uma coisa que poucos mencionam é a diferença entre git checkout nomedobranch e git checkout -b nomedobranch. O primeiro alterna para um branch existente. O segundo cria um novo branch a partir do branch atual e já muda para ele. Parece óbvio, mas vi bastante gente criar branches duplicados sem perceber porque esqueceu o parâmetro -b quando na verdade queria apenas alternar. O git switch tem um comportamento interessante que pode confundir iniciantes. Se você executar git switch nomedobranch e o branch não existir, o comando falha. Já o git checkout, na mesma situação, cria automaticamente um novo branch com esse nome. Essa diferença sutil é a causa de muitos erros em fluxos de trabalho automatizados e scripts CI/CD que não esperam a criação acidental de branches.
Outro ponto prático: quando você está em um branch e precisa voltar rapidamente para o branch anterior, o git checkout permite usar o atalho git checkout - (com um traço). O git switch não tem equivalente direto. Em situações de debugging intensivo, onde você alterna várias vezes entre branches, esse atalho economiza tempo considervel. Existe ainda o caso dos branches remotos. Para alternar para um branch que existe apenas no remoto, o git checkout precisa da flag --track: git checkout --track origin/nomedobranch. Já o git switch simplifica com git switch nomedobranch, que automaticamente cria o tracking se o branch existir no remote. Essa conveniência vem com o risco de poluir seu repositório local com cópias de branches remotos que você talvez nem precise manter.
Se você está em um repositório com muitos branches e perde o rastro do nome correto, o git checkout com tab completion funciona bem, mas o git switch também aceita tab completion e ainda filtra visualmente branches locais e remotos quando você digita git switch --list. Não é revolucionário, mas ajuda quando o histórico de branches é grande. Uma limitação importante que vale registrar: nenhum desses comandos resolve conflitos de merge automaticamente. Se o branch de destino tem commits que o branch atual não tem, e você alternar sem antes fazer merge ou rebase, o Git vai simplesmente trocar o HEAD e os arquivos de trabalho. Os commits divergentes ficam lá, esperando ser resolvidos quando você decidir juntar os branches. Esse é um comportamento que causa perda de dados em pessoas que esperam que a alternância resolva automaticamente as divergências.
Para quem trabalha com repositórios grandes e switches frequentes de branch, o git switch tende a ser mais seguro porque impede ações inadvertidas. Para quem precisa de flexibilidade e familiaridade com o comando tradicional, o git checkout continua sendo a escolha padrão. Ambos resolvem a pergunta sobre qual comando do git podemos utilizar para alternar entre branches, mas a decisão entre um e outro depende mais do seu fluxo de trabalho do que de superioridade técnica absoluta.