Artigo original: Git Switch Branch – How to Change the Branch in Git

Alternar branches é algo que você precisará fazer com frequência no Git.

Para fazer isso, você pode usar o comando git checkout.

Como criar uma branch no Git

Para criar uma branch no Git, você usa o comando git checkout e passa a flag -b com um nome.

Isso criará uma branch a partir da branch atual. O histórico da nova branch iniciará no lugar atual da branch de onde você saiu.

Levando em conta que você esteja no momento em uma branch chamada master:

(master)$ git checkout -b meu-recurso
Alterna para uma nova branch 'meu-recurso'
(meu-recurso)$

Aqui, você pode ver uma nova branch criada, chamada meu-recurso, originária de master.

Como alternar para uma branch existente no Git

Para alternar para uma branch existente, você pode usar git checkout novamente (sem a flag -b) e passar o nome da branch para a qual você quer alternar:

(meu-recurso)$ git checkout master
Alterna para a branch 'master'
(master)$

Também existe um atalho útil para retornar à branch anterior em que você estava, passando -  para git checkout em vez do nome de uma branch:

(meu-recurso)$ git checkout -
Alterna para a branch 'master'
(master)$ git checkout -
Alterna para a branch 'meu-recurso'
(meu-recurso)$

Como fazer o checkout para um commit específico

Para fazer o checkout ou alternar para um commit específico, você também pode usar git checkout e passar o SHA do commit em vez do nome da branch.

No fim, as branches são, de fato, apenas ponteiros e rastreadores de commits específicos na história do Git.

Como encontrar o SHA de um commit

Uma maneira de encontrar o SHA de um commit é ver o log (registro) do Git.

Você pode ver o log usando o comando git log:

(meu-recurso)$ git log
commit 94ab1fe28727b7f8b683a0084e00a9ec808d6d39 (HEAD -> meu-recurso, master)
Author: John Mosesman <johnmosesman@gmail.com>
Date:   Mon Apr 12 10:31:11 2021 -0500

    This is the second commmit message.

commit 035a128d2e66eb9fe3032036b3415e60c728f692 (blah)
Author: John Mosesman <johnmosesman@gmail.com>
Date:   Mon Apr 12 10:31:05 2021 -0500

    This is the first commmit message.

Na primeira linha de cada commit, após a palavra commit, é uma string longa de caracteres e números: 94ab1fe28727...

Essa string é chamada de SHA. Um SHA é um identificador exclusivo que é gerado para cada commit.

Para fazer o checkout para um commit específico, você precisa apenas passar o SHA do commit como parâmetro para o git checkout:

(meu-recurso)$ git checkout 035a128d2e66eb9fe3032036b3415e60c728f692
Note: switching to '035a128d2e66eb9fe3032036b3415e60c728f692'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 035a128 a
((HEAD detached at 035a128))$
Observação: geralmente, você precisará apenas usar os primeiros caracteres do SHA — os quatro ou cinco primeiros caracteres da string provavelmente são exclusivos com relação ao projeto.

O que é um estado 'detached HEAD'?

O resultado de fazer um check out de um commit específico coloca você em um estado "desacoplado da HEAD" (detached HEAD state).

A documentação diz:

[um estado desacoplado da HEAD] significa simplesmente que a HEAD se refere a um commit específico, em vez de se referir a uma branch nomeada

Basicamente, HEAD (um dos ponteiros internos do Git, que rastreia o local onde você está no histórico do Git) desviou-se dos branches conhecidos. Assim, mudanças a partir desse ponto formarão o novo caminho no histórico do Git.

O Git quer garantir que isso é o que você pretende, então dá a você uma espécie de "espaço livre" para experimentar — conforme descreve o resultado:

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
"Você está no estado 'desacoplado da HEAD'. Olhe ao redor, faça alterações experimentais e faça o commit das alterações. Depois, você pode descartar os commits que faz nesse estado sem impactar as branches alternando de volta a uma branch."

A partir dessa posição, você tem duas posições:

  • Experimente e descarte suas alterações, retornando à branch anterior
  • Trabalhe a partir daqui e inicie uma nova branch a partir desse ponto

Você pode usar o comando git switch - para desfazer as alterações que você faz e retorne para sua branch anterior.

Se você, em vez disso, quiser manter suas alterações e continuar a partir daqui, você pode usar git switch -c <nome-da-nova-branch> para criar uma branch a partir desse ponto.

Conclusão

O comando git checkout é um comando multifunção bastante útil.

Você pode usá-lo para criar branches, fazer o checkout em uma branch, fazer o checkout de commits específicos e mais.

Se você gostou do tutorial, o autor também fala sobre tópicos como este no Twitter, além de escrever sobre eles no site do autor (textos em inglês).