Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.43.0 11/20/23
- 2.38.1 → 2.42.1 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.30.1 → 2.34.8 no changes
- 2.30.0 12/27/20
- 2.27.1 → 2.29.3 no changes
- 2.27.0 06/01/20
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 oHEAD
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 deA
e` B` se houver exatamente uma base a ser mesclada. Você pode deixar de fora, no máximo, um deA
e` B`, no caso, a predefinição retorna paraHEAD
. - -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 assimorigin
exista. Consulte tambémcheckout.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
(ougit 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çãomerge.conflictStyle
. Os valores possíveis sãomerge
(predefinido) ediff3
(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 umhack
como um ramo local ao se ramificar doorigin/hack
(ouremotes/origin/hack
ou até mesmo dorefs/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 queHEAD
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]