Artigo original escrito por John Mosesman
Artigo original: Git Switch Branch – How to Change the Branch in Git
Traduzido e adaptado por Daniel Rosa
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).
[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.
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).