git switch

Branches e merge

Troca de branch


O comando 'git switch' leva você para outro branch: o HEAD o acompanha e seus arquivos de trabalho mudam para corresponder a esse branch. Com -c, ele cria o branch antes. Foi adicionado no Git 2.23 para assumir a parte do git checkout que troca de branch, com nomes mais claros e padrões mais seguros — ele se recusa a trocar se isso sobrescrever suas edições não commitadas.

Sinopse

git switch [<options>] <branch>
git switch [<options>] (-c|-C) <new-branch> [<start-point>]
git switch [<options>] --detach [<start-point>]
git switch [<options>] --orphan <new-branch>
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (2)

Cria um branch novo no commit atual (ou num ponto de partida dado) e troca para ele.

RecomendadoCriar e trocar num passo só

Exemplo

git switch -c feature/login

Troca mesmo que sobrescreva alterações não commitadas; essas alterações são descartadas.

Não recomendadoApaga em silêncio as edições não commitadas; prefira o stash

Exemplo

git switch --discard-changes main

Intermediário (2)

Como -c, mas se o branch já existir ele é redefinido para o ponto de partida.

Quando necessárioRedefine um branch existente — os commits antigos dele são abandonados

Exemplo

git switch -C feature/login

Troca para um commit em vez de um branch (HEAD destacado), p. ex. para examinar uma versão antiga.

Quando necessárioExaminar um commit antigo sem mover nenhum branch

Exemplo

git switch --detach HEAD~1

Avançado (1)

Cria um branch novo sem histórico e remove do disco os arquivos rastreados.

Quando necessárioHistórico separado, p. ex. um branch gh-pages

Exemplo

git switch --orphan docs

Escolhendo a opção certa

switch versus checkout

As mesmas ações de branch, antigas e novas

ComandoEquivalente em git checkout
git switch maingit checkout main
git switch -c feature/logingit checkout -b feature/login
git switch --detach HEAD~1git checkout HEAD~1
git switch -git checkout -

Exemplos

Trocar para um branch

git switch main

Ir para main.


Criar e trocar

git switch -c feature/login

Cria feature/login e vai para ele.


Branch anterior

git switch -

Volta para o branch em que você estava antes.


Rastrear um branch remoto

git switch feature/login

Se só existir origin/feature/login, é criado um branch local que o rastreia.

Exemplos de fluxos de trabalho

1
git switch main

Começar de main

2
git pull

Pegar o main mais recente

3
git switch -c feature/login

Criar seu branch

1
git stash

Guardar as edições

2
git switch main

Trocar

3
git switch - && git stash pop

Voltar e restaurar as edições

Solução de problemas

error: Your local changes to the following files would be overwritten by checkout

Causa: Uma edição não commitada conflita com o outro branch

Faça commit ou stash dela antes, ou use --discard-changes para descartá-la

fatal: invalid reference: feature/x

Causa: O branch não existe

Crie-o com git switch -c, ou execute git fetch se ele existir no origin

fatal: a branch is expected, got commit

Causa: Você passou um commit, não um branch

Use git switch --detach <commit>

Dicas e armadilhas

Boas práticas

  • ✓Use git switch para branches e git restore para arquivos em vez de git checkout.
  • ✓Mantenha o status limpo (commit ou stash) antes de trocar de branch.
  • ✓Faça pull de main antes de criar um branch novo a partir dele.

Erros comuns

  • ✗Trocar de branch com edições não commitadas e se surpreender quando elas vão junto para o novo branch.
  • ✗Usar git switch <commit> — commits precisam de --detach.
  • ✗Esquecer -c e receber "invalid reference" para um branch que ainda não existe.

Perguntas frequentes

A:

Para branches faz o mesmo trabalho, mas com opções mais claras e sem poder mexer em arquivos por acidente.

A:

Git 2.23 ou mais recente.

A:

Elas vão com você para o novo branch, a menos que haja conflito — aí a troca é recusada.