Git
Português (Brasil) ▾ Topics ▾ Latest version ▾ git-switch last updated in 2.44.0

NOME

git-switch - Alterna entre ramos

RESUMO

git switch [<opções>] [--no-guess] <ramo>
git switch [<opções>] --detach [<ponto-de-partida>]
git switch [<opções>] (-c|-C) <novo-ramo> [<ponto-de-partida>]
git switch [<opções>] --orphan <novo-ramo>

DESCRIÇÃO

Alterna para um ramo específico. A árvore de trabalho e o índice são atualizados para coincidir com o ramo. Todos os novos commits serão adicionadas ao cume deste ramo.

Opcionalmente, um novo ramo pode ser criado com -c, -C, automaticamente a partir de um ramo remoto com o mesmo nome (consulte --guess), ou desanexe a árvore de trabalho de qualquer outro ramo com a opção --detach, em conjunto com a alternância.

A alternância das ramificações não requer um índice limpo e uma árvore de trabalho (ou seja, não há diferenças em comparação com o HEAD). A operação é interrompida no entanto caso a operação leve à perda das alterações locais, a menos que seja dito o contrário com a opção --discard-changes ou --merge.

ESTE COMANDO É EXPERIMENTAL. O SEU COMPORTAMENTO PODE MUDAR.

OPÇÕES

<ramo>

O ramo para onde nos mudaremos.

<novo-ramo>

Nome para o novo branch.

<ponto-de-partida>

O ponto de partida para criar o novo ramo. Definindo um <ponto-de-partida> permite criar um ramo com base em algum outro ponto na história que não seja o local onde o HEAD aponte atualmente. (Ou, no caso da opção --detach, permitir que você inspecione e desanexe de algum outro ponto.)

Você pode usar a sintaxe @{-N} para se referir ao último ramo/commit alternado utilizando as operações "git switch" ou "git checkout". Você também pode especificar - que é sinônimo de`@{-1}`. Isso geralmente é utilizado para alternar rapidamente entre duas ramificações ou para desfazer uma alternância de ramificação feita por engano.

Como um caso especial, você pode usar A...B como um atalho para a mesclagem na base de A e` B` se houver exatamente uma base a ser mesclada. Você pode deixar de fora, no máximo, um de A e` B`, no caso, a predefinição retorna para HEAD.

-c <novo-ramo>
--create <novo-ramo>

Crie um novo ramo chamado <novo-ramo> começando em <ponto-de-partida> antes de mudar para o ramo. Este é um atalho conveniente para:

$ git branch <novo-ramo>
$ git switch <novo-ramo>
-C <novo-ramo>
--force-create <novo-ramo>

É similar a opção --create exceto quando <novo-ramo> já exista, ele será redefinido para o <ponto-de-partida>. Este é um atalho conveniente para:

$ git branch -f <novo-ramo>
$ git switch <novo-ramo>
-d
--detach

Alterne para um commit que será inspecionado e poderá ser feito experimentos descartáveis nele. Consulte a seção "HEAD DESANEXADO" no git-checkout[1] para mais detalhes.

--guess
--no-guess

Caso o <ramo> não seja encontrado mas exista uma ramificação de rastreamento exatamente em uma localidade remota (chame-o <remoto>) que coincida com um nome, trate como equivalente a

$ git switch -c <ramo> --track <remoto>/<ramo>

Caso o ramo exista em diversos ramos remotos e um deles seja nomeado pela variável de configuração checkout.defaultRemote, para propósitos de desambiguação, mesmo que <ramo> não seja o único em todos os outros ramos remotos. Defina como por exemplo, checkout.defaultRemote=origin para que sempre verifique as ramificações remotas de lá caso <ramo> seja ambíguo e ainda assim origin exista. Consulte também checkout.defaultRemote em git-config[1].

--guess é o comportamento predefinido. Utilize a opção --no-guess para desativá-lo.

-f
--force

Um atalho para --discard-changes.

--discard-changes

Prossiga mesmo que o índice ou a árvore de trabalho seja diferente do HEAD. Ambos o índice e a árvore de trabalho são restauradas para coincidir com a alternância do destino. Caso a opção --recurse-submodules seja utilizada, o conteúdo do submódulo também será restaurado para coincidir a alternância do destino. Isso é utilizado para descartar as alterações locais.

-m
--merge

Caso tenha alterações locais em um ou mais arquivos que sejam diferentes entre o ramo atual e o ramo para onde você está alternando, o comando se recusará a alternar as ramificações visando preservar as suas alterações dada a circunstância. Contudo, com esta opção, é feita uma mesclagem de três vias entre o ramo atual, o conteúdo da árvore de trabalho e o novo ramo, fazendo com que você esteja neste novo ramo.

Quando ocorre um conflito durante a mesclagem, as entradas do índice para os caminhos conflitantes não são mesclados, sendo necessário que você resolva os conflitos e marque os caminhos resolvidos com git add (ou git rm caso a mesclagem resulte na exclusão do caminho) .

--conflict=<estilo>

O mesmo que a opção --merge acima, porém altera a maneira como os blocos conflitantes são apresentados, ao substituir a variável de configuração merge.conflictStyle. Os valores possíveis são merge (predefinido) e diff3 (além do que é exibido através do estilo "merge", exibe os conteúdos originais).

-q
--quiet

Silencioso, suprima as mensagens de feedback.

--progress
--no-progress

A condição do progresso é relatado no fluxo de erro predefinido ao estar conectado em um terminal, a menos que as opções --quiet seja utilizados. Esta opção ativa os relatórios de progresso, mesmo que não estejam anexados a um terminal, independentemente da opção --quiet.

-t
--track

Ao criar uma nova ramificação, defina a configuração "upstream". A opção -c está implícita. Para mais detalhes, consulte --track no git-branch[1].

Caso nenhuma opção -c seja utilizada, o nome do novo ramo será derivado do ramo monitorado remotamente, observando a parte local da "refspec" configurada para o ramo remoto correspondente e removendo a parte inicial para o "*" em seguida. Isso nos diria para usar um hack como um ramo local ao se ramificar do origin/hack (ou remotes/origin/hack ou até mesmo do refs/remotes/origin/hack). Caso o nome informado não tenha barra ou se a dedução acima resultar em um nome vazio, a dedução será abortada. Em tais casos, você pode explicitamente dar um nome com a opção -c.

--no-track

Não configure "upstream" mesmo que a variável de configuração branch.autoSetupMerge seja verdadeira.

--orphan <novo-ramo>

Crie um novo ramo órfão, chamado <novo-ramo>. Todos os arquivos monitorados são removidos.

--ignore-other-worktrees

O comando git switch se recusa quando a "ref" desejada já está foi averiguada por uma outra árvore de trabalho. Esta opção faz com que ele averigue a "ref" mesmo assim. Em outras palavras, a "ref" pode ser mantida por mais de uma árvore de trabalho.

--recurse-submodules
--no-recurse-submodules

O uso da opção --recurse-submodules atualizará o conteúdo de todos os submódulos ativos de acordo com commit gravado no superprojeto. Caso nada (ou a opção --no-recurse-submodules) seja utilizado, os submódulos que trabalham nas árvores não serão atualizados. Assim como git-submodule[1], isso faz com que HEAD seja desanexando dos submódulos.

EXEMPLOS

O comando a seguir alterna para o ramo principal "master":

$ git switch master

Depois de trabalhar no ramo errado, mudar para o ramo correto seria feito utilizando:

$ git switch mytopic

No entanto, o seu ramo "errado" e o correto "mytopic" podem diferir nos arquivos modificados localmente por você. A mudança entre os ramos acima falhará assim:

$ git switch mytopic
erro: você tem alterações locais em 'frotz'; não mudar de ramo.

Você pode repassar a opção`-m` ao comando, que tentaria uma mesclagem de três vias:

$ git switch -m mytopic
Auto-merging frotz

Após esta mesclagem de três vias, as alterações locais não serão registradas no seu arquivo do índice, portanto, o git diff exibirá quais foram as alterações feitas desde o cume do novo ramo.

Para voltar à ramificação anterior antes de mudarmos para "mytopic" (ou seja, para a ramificação "master"):

$ git switch -

Você pode aumentar um novo ramo a partir de qualquer commit. Por exemplo, mude para "HEAD~3" e crie o ramo "fixup":

$ git switch -c fixup HEAD~3
Foi alternado para um novo ramo 'fixup'

Caso queira criar uma nova ramificação a partir do ramo remoto de mesmo nome:

$ git switch new-topic
O ramo 'new-topic' foi configurada para monitorar o ramo remoto 'new-topic' da 'origin'
Foi alternado para um novo ramo 'new-topic'

Para averiguar o commit HEAD~3 por inspeções temporárias ou experimentos sem criar um novo ramo:

$ git switch --detach HEAD~3
HEAD is now at 9fc9555312 Merge branch 'cc/shared-index-permbits'

Se acontecer de valer a pena manter o que você fez, é possível criar um novo nome para ele (sem precisar alternar):

$ git switch -c good-surprises

GIT

Parte do conjunto git[1]

scroll-to-top