Pular para o conteúdo principal

Git switch vs checkout: entenda a diferença

Evolua seu fluxo de trabalho com Git dominando o git switch. Veja como ele difere do git checkout, evita estados de HEAD destacado e torna o gerenciamento de branches mais seguro.
Atualizado 17 de set. de 2026  · 11 min lido

Explorar com IA

ChatGPTClaudePerplexity

Por muito tempo, o git checkout cuidou de quase tudo relacionado a navegação no repositório, troca de branches, restauração de arquivos e inspeção de commits antigos. Essa flexibilidade gerava ambiguidade. A mesma sintaxe podia significar coisas diferentes dependendo do contexto.

Um pequeno erro de digitação podia trocar de branch quando você queria restaurar um arquivo. Um check rápido no histórico com git checkout <commit-hash> podia te deixar em um estado de HEAD destacado sem você perceber. O comando funcionava, mas exigia atenção constante aos seus múltiplos comportamentos.

Foi aí que o Git 2.23 introduziu o git switch, um comando mais especializado para lidar com operações de branch.

Neste guia, vou mostrar como o git switch é diferente do git checkout. Também vamos ver onde cada comando se encaixa nos fluxos de trabalho modernos e entender seus escopos.

Se Git ainda é relativamente novo para você, recomendo aprender o básico no nosso curso Introduction to Git.

O que é o git switch?

git switch é um comando dedicado, introduzido no Git 2.23, para gerenciar navegação e criação de branches. Ele torna a movimentação entre branches mais limpa, segura e menos propensa a erros.

Antes dele, os desenvolvedores usavam git checkout para trocar de branch. O problema era que o git checkout acumulava várias tarefas não relacionadas: 

  • Trocar de branches
  • Restaurar arquivos
  • Inspecionar commits

Isso deixava o comando sobrecarregado e fácil de usar de forma equivocada.

O Git resolveu isso dividindo responsabilidades. O git switch agora cuida da troca e criação de branches, e o git restore cuida da restauração de arquivos. Essa separação reduz a ambiguidade e diminui o risco de alterações acidentais em arquivos.

Na prática, git switch branch-name move o ponteiro HEAD atual para a branch informada. Você também pode usar git switch -c new-branch para criar e já alternar para uma nova branch.

Git switch vs checkout: mecânica central

Agora que você entendeu por que o git switch foi criado, vamos ver como ele realmente difere do git checkout por baixo dos panos.

Gerenciamento de branches sob medida

Antes do Git 2.23, o git checkout fazia tanto navegação de branches quanto restauração de arquivos. Essa abordagem funcionava, mas misturava dois conceitos fundamentalmente diferentes. Ele move o HEAD, restaura arquivos e faz checkout de commits. Dependendo do uso, manipula o ponteiro HEAD, o index e a working tree.

git switch vs checkout

O git switch foca exclusivamente em mover o ponteiro HEAD entre branches. Quando você roda git switch branch-name, o Git atualiza o HEAD para apontar para aquela branch e ajusta o diretório de trabalho para combiná-la. Esse comando existe especificamente para navegação e criação de branches. Com git switch e git restore, as responsabilidades ficam bem divididas:

  • git switch move o HEAD entre branches.

  • git restore modifica arquivos na working tree ou no index.

Por exemplo, restaurar um arquivo antes exigia: git checkout HEAD -- file.txt. Hoje, a abordagem recomendada é: git restore file.txt.

Aqui, você está restaurando um arquivo, não navegando entre branches. Em scripts e na documentação do time, essa distinção melhora a legibilidade e reduz erros.

Evolução dos comandos do Git

O Git 2.23 separou responsabilidades ao introduzir o git switch para operações com branches e o git restore para restauração de arquivos.

Antes dessa versão, o git checkout funcionava como uma ferramenta multiuso. Ele podia trocar de branch, restaurar arquivos ou ir para commits arbitrários. Porém, isso gerava confusão, especialmente para iniciantes. Ao dividir o comando, o Git reduziu a ambiguidade e deixou os fluxos mais claros.

Comportamento de HEAD destacado

No Git, o HEAD normalmente aponta para uma branch. Essa branch, por sua vez, aponta para o commit mais recente. Quando você cria um novo commit, o Git move a branch para frente. Esse é o fluxo padrão.

Um HEAD destacado acontece quando o HEAD aponta diretamente para um commit em vez de uma branch. Nesse estado, você não está em nenhuma branch. Se fizer um novo commit, o Git o cria, mas nenhuma branch o referencia. A menos que você crie explicitamente uma branch, esses commits ficam sem referência e podem ser difíceis de localizar depois.

git switch vs checkout detached head behavior

Quando você executa git checkout <commit-hash>, o Git automaticamente entra no modo de HEAD destacado. Ele muda para aquele commit e destaca o HEAD sem pedir confirmação extra. Esse comportamento é válido, mas facilita entrar nesse modo sem querer.

Já o git switch exige menção explícita. Para destacar o HEAD, você precisa usar git switch --detach <commit-hash>. Sem a flag --detach, o git switch atua apenas em branches. Esse design reduz estados destacados acidentais e torna o trabalho com branches mais seguro e previsível.

Principais diferenças funcionais entre git switch e checkout

Agora que cobrimos as diferenças de alto nível, vamos ver sintaxe, escopo e pontos de segurança.

Sintaxe e criação de branches

Para criar e já alternar para uma nova branch com git switch, use git switch -c <branch-name>. No git checkout, o equivalente é git checkout -b <branch-name>.

Ambos criam uma nova branch e trocam para ela, mas a diferença está na clareza de intenção. No git switch, a flag -c deixa claro que você está criando uma branch, enquanto no git checkout, -b historicamente significa "branch", mas comunica menos a intenção.

O git switch também traz a flag -C: git switch -C <branch-name>. Ela é mais forte que -c: cria a branch à força ou a reseta se já existir. Esse comportamento é explícito e focado em branch. No git checkout, existe algo semelhante, mas a semântica é menos separada porque o comando serve a vários propósitos.

Escopo das operações

git switch funciona somente com branches. Ele não restaura arquivos, não tira mudanças do stage e não faz checkout de caminhos específicos de commits anteriores. Basicamente, ele não suporta operações no nível de arquivo.

Em contraste, o git checkout pode atuar no nível de arquivo. Por exemplo, git checkout <commit> -- <file> restaura um arquivo específico de um commit passado. 

Porém, a documentação moderna do Git sugere usar git restore para isso. O ponto-chave é que o git switch deliberadamente exclui manipulação de arquivos para manter seu escopo enxuto e previsível.

Segurança e desambiguação

Um problema comum do git checkout é a ambiguidade. Se um nome de branch e um nome de arquivo forem idênticos, dependendo do contexto, ele pode trocar de branch ou restaurar um arquivo. O git switch evita totalmente essa ambiguidade. Ele só opera em branches. Se você não informar um nome de branch válido, o Git falha de forma clara em vez de tentar adivinhar. 

git switch também fornece mensagens de erro mais claras quando mudanças locais conflitam com a branch de destino. Se a troca de branch sobrescreveria trabalho não commitado, o Git interrompe a operação e exibe mensagens diretas, como:

  • Se a branch não existe: fatal: invalid reference: feature/login

  • Se mudanças locais seriam sobrescritas: error: Your local changes to the following files would be overwritten by checkout

  • Se a branch já existe ao usar -c: fatal: a branch named 'feature/login' already exists

Mensagens claras como essas reduzem mudanças de estado acidentais.

Exemplos práticos de git switch

Entender o git switch fica muito mais fácil quando você o vê em fluxos reais. Estes exemplos mostram como ele se comporta no dia a dia do gerenciamento de branches e por que ele é mais seguro e previsível do que o git checkout.

Operações padrão de branch

No desenvolvimento diário, você basicamente alterna entre branches ou cria novas.

  • Para mudar para uma branch local existente, use: git switch <branch_name>. Aqui, o Git move o HEAD para a branch informada e atualiza seu diretório de trabalho para refletir essa branch.

  • Para criar uma nova branch para a feature "new_ui" e já alternar para ela em um passo, use git switch -c feature/new-ui. Isso cria a branch a partir do seu commit atual e move o HEAD para ela imediatamente.

  • Se você precisa resetar ou sobrescrever uma branch existente, use: git switch -C feature/new-ui. O -C maiúsculo força a criação ou reseta o ponteiro da branch. Isso deixa a intenção destrutiva explícita.

  • Você também pode alternar rapidamente entre suas duas últimas branches com git switch -. Isso é muito útil ao revisar código em uma branch e voltar repetidamente para a sua branch de feature.

git switch -

Trabalhando com branches remotas

Muitas vezes, uma branch existe no remoto, mas não localmente. Por exemplo, alguém faz push de origin/bugfix, mas você ainda não a criou.

  • Se você rodar: git switch bugfix, o Git criará uma branch local bugfix e a configurará para rastrear a branch remota origin/bugfix, assumindo que haja correspondência clara no origin. Isso simplifica a colaboração porque você não precisa definir o upstream manualmente.

  • Se quiser impedir que o Git adivinhe, use: git switch --no-guess bugfix. Agora o Git falha se a branch não existir localmente. Isso é útil em fluxos mais rígidos, onde o rastreamento automático poderia gerar confusão.

  • Se preferir ser explícito ao criar uma branch de rastreamento, use git switch -c bugfix --track origin/bugfix. Isso deixa a relação de tracking clara no próprio comando.

Inspeção experimental de commits

Às vezes você só quer olhar um commit antigo. Talvez queira testar uma versão anterior ou verificar quando um bug foi introduzido. Nesse caso, você quer ir temporariamente para aquele ponto no histórico.

Com o git switch, você precisa dizer isso explicitamente: git switch --detach <commit-hash>.

A flag --detach diz ao Git: mova o HEAD diretamente para este commit, não para uma branch. Agora você pode explorar o código, rodar testes ou buildar o projeto. Se fizer novos commits nesse estado, eles não ficam ligados a nenhuma branch, a menos que você crie uma.

Com git checkout <commit-hash>, a mesma ação acontece automaticamente, sem flag extra. Isso facilita entrar em modo destacado sem querer, enquanto exigir --detach no git switch evita estados de HEAD destacado acidentais. 

Integração do git switch no fluxo de trabalho

Agora, vamos ver como integrar o git switch em fluxos típicos do Git.

Escolha por cenário

Em fluxos modernos de desenvolvimento, o git switch deve lidar com todo o trabalho relacionado a branches. Isso inclui 

  • Desenvolvimento rotineiro de features
  • Revisão de pull requests
  • Rebase local
  • Scripts de CI/CD que fazem checkout de branches durante builds

Como o git switch foca apenas em gerenciamento de branches, ele comunica a intenção com clareza.

git checkout ainda tem seu papel, mas menor agora. Automação legada escrita antes do Git 2.23 costuma depender dele. Algumas tarefas de reversão no nível de arquivo também podem usá-lo, embora o git restore seja o substituto preferido daqui em diante.

Solução de problemas comuns

Há dois cenários distintos que podem causar problema ao usar o git switch.

“Your local changes would be overwritten”

Um erro comum ao tentar trocar de branch com mudanças locais presentes é “error: Your local changes would be overwritten”. Aqui, o Git bloqueia a operação porque a troca sobrescreveria trabalho não commitado. Você tem duas opções seguras para contornar isso:

  1. Se quiser manter as mudanças para depois, rode git stash antes de trocar para a branch de destino. Depois de trocar, você pode restaurá-las com git stash pop.

  2. Se quiser descartar as mudanças locais de propósito, use: git switch --discard-changes target-branch. Essa opção diz ao Git para descartar as mudanças locais e resetar o index e a working tree para combinar com a branch de destino (não remove arquivos não rastreados).

Entrar em HEAD destacado sem querer

Outro cenário é entrar acidentalmente em um estado de HEAD destacado. Se você perceber que não está em uma branch, mas tem trabalho que quer manter, crie uma nova branch imediatamente: git switch -c recovery-branch. Isso anexa seu histórico de commits atual a uma branch nomeada e preserva suas mudanças.

Boas práticas ao adotar o git switch

Adotar o git switch não é só uma preferência de comando. É uma pequena melhoria estrutural na forma como os times pensam os fluxos de trabalho com Git. Os benefícios se acumulam quando a adoção é consistente na documentação, onboarding e automação.

Estratégias de migração do time

Comece pela documentação interna. Se seus guias de “primeiros passos” ainda ensinam git checkout para trocar de branch, atualize para git switch. Mantenha o checkout apenas onde ele for realmente necessário.

O treinamento também ajuda. Comandos modernos do Git oferecem mensagens de erro mais claras, especialmente quando mudanças locais conflitam com a troca de branch. Incentive desenvolvedores a ler e entender essas mensagens em vez de tratá-las como falhas genéricas. O conjunto mais novo de comandos é mais explícito, e reconhecer isso aumenta a confiança e reduz erros.

Consistência na automação

Em scripts shell, pipelines de CI e aliases do Git, prefira git switch para navegação entre branches, pois comunica a intenção de imediato. Um script que usa git switch main é mais fácil de interpretar do que um que depende de git checkout, que pode ter vários significados. 

Se você define aliases do Git, atualize-os para refletir o uso moderno. Por exemplo, um alias para criar branches de feature deve encapsular git switch -c, não git checkout -b.

Por fim, verifique as versões do Git em todos os ambientes. git switch requer Git 2.23 ou superior. Garanta que as máquinas dos desenvolvedores, os runners de CI e os servidores de build atendam a esse requisito antes de padronizar o novo comando. Uma checagem simples de versão evita problemas sutis de compatibilidade.

Conclusão

Olhando o quadro geral, a grande vantagem do git switch é simples: ele torna o gerenciamento de branches mais claro, seguro e intencional. Quando você roda o comando, não há ambiguidade sobre o que está acontecendo. Você está trocando de branch. Só isso. E esse grau de clareza tira uma quantidade surpreendente de atrito do desenvolvimento do dia a dia.

No entanto, o git checkout não foi descontinuado; você ainda pode usá-lo para restaurar arquivos, alternar entre branches ou lidar com cenários mais complexos. Mas, para a navegação diária entre branches, o Git recomenda usar o git switch.

Como próximo passo, recomendo o nosso curso Intermediate Git, focado em colaboração com Git.

Git switch vs checkout: FAQs

O git checkout foi descontinuado?

 Não. O git switch é uma alternativa moderna ao git checkout, mas apenas para operações relacionadas a branches. O git checkout ainda funciona e continua disponível, especialmente em fluxos antigos e scripts legados. Contudo, para trocar e criar branches, o git switch é o comando moderno recomendado.

O git switch funciona em todas as versões do Git?

Não. O git switch foi introduzido no Git 2.23. Se você trabalha em ambientes com versões mais antigas, o comando não estará disponível. Sempre verifique sua versão do Git antes de padronizá-la em automações ou documentações.

Posso usar git switch para restaurar arquivos?

Não. O git switch lida apenas com operações de branch. Para restaurar arquivos, use o git restore, que substitui a funcionalidade relacionada a arquivos anteriormente feita pelo git checkout.

Por que o Git ainda mantém o git checkout?

O Git mantém o git checkout por compatibilidade retroativa. Muitos scripts, tutoriais e fluxos antigos dependem dele. No entanto, o Git moderno incentiva o uso de git switch e git restore para uma separação mais clara de responsabilidades.


Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana é redatora freelancer de tecnologia e tem um diploma de quatro anos em Ciência da Computação. Escrever sobre vários tópicos, incluindo ciência de dados, computação em nuvem, desenvolvimento, programação, segurança e muitos outros, é algo natural para ela. Ela gosta de literatura clássica e de explorar novos destinos.

Tópicos
Git

Cursos de Git

Curso

Introdução ao Git

2 h
96.9K
Aprenda os conceitos básicos do Git para controlar versões em projetos de software e dados.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado
Git

blog

O que é Git? Manual completo do Git

Saiba mais sobre o sistema de controle de versão mais conhecido e por que é uma ferramenta de colaboração indispensável para cientistas de dados e programadores.
Summer Worsley's photo

Summer Worsley

14 min

Tutorial

Tutorial de push e pull do GIT

Saiba como realizar solicitações Git PUSH e PULL por meio do GitHub Desktop e da linha de comando.

Olivia Smith

13 min

Tutorial

Tutorial de GitHub e Git para iniciantes

Um tutorial para iniciantes mostrando como o controle de versão do Git funciona e por que ele é essencial em projetos de ciência de dados.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Git Pull Force: Como substituir uma ramificação local por uma remota

Saiba por que o git pull --force não é a melhor maneira de substituir uma ramificação local pela versão remota e descubra o método adequado usando git fetch e git reset.

Tutorial

Git Rename Branch: Como renomear uma filial local ou remota

Saiba como renomear ramificações locais e remotas do Git usando o terminal ou a interface gráfica do usuário (GUI) de clientes populares como o GitHub.

Tutorial

Git Prune: O que é o Git Pruning e como usar o Git Prune

O Git prune é um comando do Git que remove objetos do repositório que não são mais acessíveis a partir de qualquer commit ou branch, ajudando a liberar espaço em disco.
Ver MaisVer Mais