Pular para o conteúdo principal
InicioTutoriaisGit

Git Switch Branch: Um guia com exemplos práticos

Saiba como mudar uma ramificação no Git usando o git switch e entenda as diferenças entre o git switch e o git checkout.
Actualizado 12 de set. de 2024  · 8 min leer

Ramificações no Git representam linhas independentes de desenvolvimento, permitindo que os desenvolvedores trabalhem em vários recursos ou versões de um projeto simultaneamente.

As ramificações do Git fornecem uma maneira estruturada de gerenciar as alterações de código, permitindo uma integração tranquila de novos recursos, correções de bugs e ideias experimentais sem interromper a base de código principal. 

Diagrama mostrando um projeto com três ramificações

Tradicionalmente, usamos o comando git checkout comando para mover-se entre as ramificações. No entanto, o comando checkout permite que você faça muito mais do que simplesmente mudar de ramo, o que causa alguma confusão e pode levar a erros.

Introduzido no Git 2.23 em agosto de 2019, o comando git switch comando fornece uma maneira mais intuitiva de alternar e criar novas ramificações.

Mudança e criação de ramificações com o Git Switch

Em projetos complexos, as prioridades mudam constantemente, e o fluxo de trabalho geralmente não é linear. Normalmente, cada ramificação se concentra em alterações específicas, o que nos permite trabalhar em vários novos recursos ou correções de bugs simultaneamente, cada um sendo implementado em sua ramificação.

Há vários motivos pelos quais talvez seja necessário pausar o trabalho em um recurso e direcionar nossa atenção para outra ramificação, como, por exemplo:

  • Aguardando uma revisão de código.
  • Encontrar um obstáculo e precisar da ajuda de um colega de trabalho.
  • Abordagem de um hotfix que requer atenção imediata.

Alternar entre ramificações de forma eficiente é fundamental para manter o desenvolvimento tranquilo e garantir que as alterações cheguem onde devem chegar. Com várias tarefas e colaboração em equipe, é importante ter uma maneira simples e confiável de mudar de ramo.

Para mudar para um ramo existente usando o comando switch, você deve fazer o seguinte:

git switch <branch-name>

No comando acima, deve ser substituído pelo nome da filial para a qual você deseja mudar. Digamos que você queira trabalhar em um novo recurso localizado em uma ramificação existente chamada feature-x, então usaríamos o comando:

git switch feature-x

Torne-se um engenheiro de dados

Desenvolva habilidades em Python para se tornar um engenheiro de dados profissional.

Comece a Usar Gratuitamente

Como descobrir os nomes das filiais existentes

Se quisermos listar as ramificações disponíveis, usaremos o comando git branch. O ramo atual será mostrado com um asterisco ao lado dele. Por exemplo, se tivermos três filiais locais denominadas main, feature-x e bug-z, e estivermos atualmente na filial main, o resultado será:

* main
feature-x
bug-z

Mudança para uma filial remota

O comando anterior nos permite mudar para uma ramificação que já temos em nosso computador local. Para mudar para um branch do repositório remoto, precisamos criar uma versão local dele usando o seguinte comando:

git switch -c <local-branch-name> origin/<remote-branch-name>

Aqui, é o nome que queremos que a filial tenha localmente, enquanto é o nome da filial remota. Em geral, queremos usar o mesmo nome para evitar confusão. Digamos que você não tenha a filial feature-x localmente. Em seguida, podemos criar uma versão local e alternar para ela, dessa forma:

git switch -c feature-x origin/feature-x

Ao usar o mesmo nome, o Git fornece uma abreviação para o comando usando a opção --track. Portanto, o comando acima é equivalente a:

git switch --track origin/feature-x

Para listar as ramificações remotas, podemos usar o comando git branch -r.

O repositório local não mantém automaticamente o controle das ramificações remotas. Portanto, antes de listar ou mudar para uma ramificação remota, é importante que você atualize o repositório local usando git fetch.

Criando uma nova ramificação e mudando para ela

Queremos criar uma ramificação totalmente nova para começar a trabalhar em um novo recurso. Nesse caso, podemos usar o sinalizador -c:

git switch -c <new-branch-name>

Substituímos pelo nome da filial. Por exemplo, para criar uma ramificação chamada feature-y, você deve fazer o seguinte:

git switch -c feature-y

Voltar para a ramificação anterior

Muitas vezes, depois de mudar de ramificação para fazer algum trabalho, queremos voltar para a ramificação em que estávamos trabalhando anteriormente. O Git fornece uma abreviação para isso usando o comando:

git switch -

Git Switch vs. Git Switch. Checkout do Git

O comando git checkout está no Git desde o início. Antes da introdução do git switch em 2019, o git checkout era o comando usado para alternar entre as ramificações. No entanto, o escopo do comando git checkout vai além da simples navegação entre as ramificações. Aqui está um detalhamento das diferenças:

  • git switch: Seu objetivo é oferecer uma maneira mais intuitiva de alternar e criar novas ramificações. Seu objetivo é simplificar o conjunto de comandos e reduzir a confusão.
  • git checkout: Um comando mais versátil que pode ser usado para alternar ramificações, mas também para verificar arquivos e restaurar conteúdo de diferentes commits ou ramificações.

O design do git switch dificulta a substituição acidental de alterações. Ele tem uma sintaxe mais explícita para alternar ramificações e criar novas ramificações.

Como o git checkout faz várias coisas (troca de ramificações, restauração de arquivos etc.), há uma chance maior de você cometer erros ao usá-lo.

Git Switch: Erros comuns

Ao gerenciar filiais, você pode se deparar com alguns problemas comuns. Um deles está tentando criar uma ramificação que já existe localmente. Outro problema frequente ocorre quando você tenta mudar de ramo com alterações não confirmadas. Vamos começar explicando a primeira.

A filial já existe localmente

Cada filial local precisa de um nome exclusivo. Você pode usar o site git switch para criar filiais locais de duas maneiras:

1. Para rastrear um ramo remoto:

git switch --track origin/<branch-name>

2. Para criar uma nova filial local:

git switch -c <branch-name>

Em ambos os casos, se já houver uma ramificação local chamada , o Git apresentará um erro dizendo:

fatal: a branch named '<branch-name>' already exists

Não é possível criar uma filial com o mesmo nome de outra filial local

Nesse caso, podemos mudar para o ramo sem criá-lo usando git switch .

O ramo atual tem alterações não confirmadas

O Git não nos permitirá mudar de ramo se o ramo atual tiver alterações não confirmadas que seriam substituídas pela mudança. Nesse caso, o Git lançará um erro dizendo:

Please commit your changes or stash them before you switch branches.

<code data-mce-selected=

Como a mensagem indica, para superar essa situação, precisamos primeiro confirmar nossas alterações ou armazená-las. Se as alterações estiverem prontas para serem confirmadas no repositório, devemos confirmá-las usando:

git commit -m "Commit message"

Se quisermos manter as alterações, mas ainda não estivermos prontos para fazer o commit, poderemos salvá-las temporariamente usando o comando git stash comando:

git stash

Se você armazenar as alterações antes de mudar de ramo e quiser reaplicá-las quando voltar ao ramo original, poderá usar o comando git stash pop.

Como alternativa, também podemos decidir descartar as alterações usando o sinalizador --discard-changes:

git switch --discard-changes <branch-name>

Tenha cuidado ao usar a última opção, pois as alterações serão excluídas permanentemente.

Uso avançado do Git Switch

Quando você precisa criar ramificações a partir de pontos específicos no histórico do projeto ou lidar com cenários especiais, o site git switch oferece funcionalidade avançada para atender a essas necessidades.

Ramificação a partir de um ponto específico

Por padrão, ao criar uma ramificação com git switch, o estado inicial da nova ramificação será o HEAD da ramificação em que estamos atualmente.

Por padrão, a criação de uma ramificação começa no HEAD atual

Imagine que você queira iniciar uma nova ramificação a partir de um commit anterior específico. Cada commit é identificado por um exclusivo, que pode ser usado com o comando git switch para criar uma nova ramificação a partir desse commit. Veja como você pode fazer isso:

switch -c feature-y <hash>

Substitua pelo hash de confirmação real.

Podemos ramificar a partir de um commit específico fornecendo o hash do commit

Mudança para uma cabeça separada

Se quisermos explorar ou experimentar um commit específico sem afetar a ramificação atual ou criar uma nova ramificação, podemos usar uma cabeça separada com o comando:

git switch --detach <hash>

Mudança para uma cabeça separada

Ao desanexar o cabeçalho, podemos inspecionar com segurança o estado do repositório em um commit específico, executar testes ou fazer alterações temporárias sem o risco de que essas alterações sejam acidentalmente confirmadas no branch de trabalho atual. Os casos de uso mais comuns incluem:

  • Visualização de um estado antigo: Se quisermos inspecionar ou testar um commit mais antigo sem fazer alterações no branch atual, podemos mudar para esse commit em um estado desanexado.
  • Alterações temporárias: Se quisermos fazer experiências com alterações sem afetar nenhuma ramificação, podemos fazer essas alterações em um estado de cabeça separada. Observe que todos os novos commits que fizermos nesse estado não pertencerão a nenhum branch, e talvez seja necessário criar um novo branch se quisermos manter esses commits.
  • Finalidades de construção/teste: Às vezes, precisamos criar ou testar o software em um commit específico. A mudança para um estado HEAD desanexado nesse commit nos permite fazer isso sem nenhum impacto na estrutura de ramificação do repositório.

Forçar uma troca

Aprendemos que o Git não nos permite mudar de ramo se houver alterações não confirmadas que possam entrar em conflito com o ramo de destino. Se tivermos certeza de que queremos descartar essas alterações e prosseguir com a mudança, podemos forçá-la usando a opção -f, assim:

git switch -f <branch-name>

Há ressalvas importantes a serem consideradas. 

  • Todas as alterações não confirmadas serão perdidas sem aviso, podendo resultar em perda de trabalho se essas alterações não tiverem sido salvas em outro lugar. 
  • O uso indiscriminado do site -f pode promover a falta de disciplina, incentivando os desenvolvedores a ignorar as práticas adequadas de controle de versão, como armazenar ou enviar alterações WIP (work-in-progress). Isso pode levar a um histórico caótico do repositório e complicar a colaboração. Portanto, embora o site git switch -f ofereça velocidade e conveniência, ele deve ser usado criteriosamente e com um entendimento claro dos riscos para atenuar as possíveis desvantagens.

Conclusão

O comando git switch facilita a troca e a criação de ramificações em comparação com o antigo comando git checkout.

Ele simplifica o processo e ajuda a reduzir erros, facilitando o gerenciamento da base de código pelos desenvolvedores.

Esse comando ajuda a evitar problemas comuns, como a substituição acidental de alterações ou a confusão de diferentes funções do git checkout.

A adoção desse comando pode tornar a navegação nas ramificações do Git mais intuitiva e aumentar a colaboração entre as equipes de desenvolvimento.

Torne-se um engenheiro de dados

Comprove suas habilidades como engenheiro de dados pronto para o trabalho.

Photo of François Aubry
Author
François Aubry
LinkedIn
Ensinar sempre foi minha paixão. Desde meus primeiros dias como estudante, eu buscava ansiosamente oportunidades para dar aulas particulares e ajudar outros alunos. Essa paixão me levou a fazer um doutorado, onde também atuei como assistente de ensino para apoiar meus esforços acadêmicos. Durante esses anos, encontrei imensa satisfação no ambiente tradicional da sala de aula, promovendo conexões e facilitando o aprendizado. Entretanto, com o advento das plataformas de aprendizagem on-line, reconheci o potencial transformador da educação digital. Na verdade, participei ativamente do desenvolvimento de uma dessas plataformas em nossa universidade. Estou profundamente comprometido com a integração dos princípios tradicionais de ensino com metodologias digitais inovadoras. Minha paixão é criar cursos que não sejam apenas envolventes e informativos, mas também acessíveis aos alunos nesta era digital.
Temas

Aprenda controle de versão com estes cursos!

Certificação disponível

Course

Fundamentos do Git

2 hr
570
Descubra os fundamentos do Git para controle de versão em seus projetos de software e dados.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow