Usando ramificações

Git Checkout

Esta página analisa o comando git checkout com exemplos de uso e casos extremos. Em termos Git, um “checkout” é o ato de alternar entre versões diferentes de uma entidade de destino. O comando git checkout opera em três entidades distintas: arquivos, commits e branches. Além da definição de “checkout”, o termo “verificação” costuma ser usado para implicar o ato de executar o comando git checkout. No tópico Como desfazer alterações, a gente viu como o git checkout pode ser usado para visualizar commits antigos. O foco para a maioria deste documento vai ser operações de verificação em branches.

A verificação de branches é semelhante à verificação de commits e arquivos antigos, pois o diretório atual é atualizado para ficar igual aos branches/revisões selecionados; no entanto, novas alterações são salvas no histórico do projeto — ou seja, não é uma operação apenas de leitura.

Verificação de branches

O comando git checkout permite navegar entre branches criados pelo git branch. A verificação de um branch atualiza os arquivos no diretório atual para que fique igual à versão armazenada nesse branch e diz ao Git para gravar todos os novos commits nesse branch. Pense nisso como uma maneira de selecionar em qual linha de desenvolvimento você está trabalhando.

Ter um branch específico para cada novo recurso é uma diferença drástica do fluxo de trabalho SVN tradicional, que facilita demais o teste de novos experimentos, sem medo de destruir as funcionalidades atuais, além de possibilitar o trabalho em diversos recursos não relacionados ao mesmo tempo. Os branches ainda facilitam vários fluxos de trabalho colaborativos.

O comando git checkout pode, às vezes, ser confundido com o git clone. A diferença entre os dois é que o clone trabalha para buscar código de um repositório remoto, já o checkout serve para alternar entre versões de código já existentes no sistema local.

Uso: branch atuais

Supondo que o repositório em que você está trabalhando contenha branches pré-existentes, você pode alternar entre eles usando o git checkout. Para descobrir quais branches estão disponíveis e o nome do branch atual, execute git branch.

 $> git branch master another_branch feature_inprogress_branch $> git checkout feature_inprogress_branch 

O exemplo acima demonstra como exibir uma lista de branches disponíveis executando o comando git branch e alternar para um branch especificado, neste caso, o feature_inprogress_branch.

Novos branches

O Git checkout funciona lado a lado com git branch. O comando git branch pode ser usado para criar um branch novo. Quando quiser iniciar um recurso novo, crie um branch a partir do master usando git branch new_branch. Então, você vai poder usar o git checkout new_branch para mudar para esse branch. Além disso, o comando git checkout aceita um argumento -b que atua como um método de conveniência que vai criar o branch e mudar na hora para ele. Você pode trabalhar em vários recursos em um único repositório alternando entre eles com o git checkout.

git checkout -b 

O exemplo acima cria e verifica o ao mesmo tempo. A opção -b é uma sinalização de conveniência que diz ao Git para rodar o git branch antes de rodar o git checkout .

git checkout -b  

Por padrão, o git checkout -b vai usar como base para o new-branch o HEAD atual. Outro parâmetro de branch opcional pode ser transmitido para o git checkout. No exemplo acima, é transmitido e, então, o new-branch toma o existing-branch como base em vez do HEAD atual.

Alternância de branches

Alternar entre os branches é uma operação simples. O comando a seguir vai apontar HEAD para a ponta de .

git checkout 

O Git rastreia um histórico de operações de verificação no reflog. Você pode executar git reflog para visualizar o histórico.

Git checkout em um branch remoto

Ao colaborar com uma equipe, é comum utilizar repositórios remotos. Esses repositórios podem ser hospedados e compartilhados ou podem ser uma cópia local de outro colega. Cada repositório remoto vai conter seu próprio conjunto de branches. Para verificar um branch remoto, você precisa primeiro buscar o conteúdo do branch.

git fetch --all

Em versões mais recentes do Git, você pode então verificar o branch remoto como um branch local.

git checkout 

Versões mais antigas do Git exigem a criação de um novo branch baseado no remoto.

git checkout  origin/

Além disso, você pode verificar um novo branch local e fazer a redefinição para o último commit de branches remotos.

 git checkout -b  git reset --hard origin/

HEADS desvinculados

Agora que a gente viu os três principais usos do git checkout em branches, é importante discutir o estado “detached HEAD”. Não se esqueça de que o HEAD é a maneira do Git de se referir ao snapshot atual. Por dentro, o comando git checkout apenas atualiza o HEAD para apontar para o branch ou commit especificado. Quando aponta para um branch, o Git não se queixa, mas quando você verifica um commit, ele muda para um estado “detached HEAD”.

Este é um aviso dizendo que tudo o que você está fazendo está “separado” do resto do desenvolvimento do projeto. Se você começasse a desenvolver um recurso enquanto em um estado de HEAD desvinculado, não haveria branch que permitisse que você voltasse a ele. Quando você fosse, verificar outro branch (por exemplo, para fazer o merge do seu recurso), não haveria como fazer referência ao seu recurso:

A questão é que você deve sempre fazer o desenvolvimento em um branch — nunca em um HEAD separado. Isso garante que você sempre tenha uma referência para os novos commits. No entanto, se você está apenas olhando um commit antigo, não importa se você está em um estado HEAD separado ou não.

Resumo

Esta página focou no uso do comando git checkout ao alterar branches. Em resumo, o git checkout, quando usado em branches, altera o alvo da referência HEAD. Ele pode ser usado para criar branches, alternar de branch e verificar branches remotos. O comando git checkout é uma ferramenta essencial para a operação padrão do Git. É uma contraparte do git merge. Os comandos git checkout e git merge são ferramentas essenciais para habilitar fluxos de trabalho git.

Pronto para tentar a ramificação?

Tente este tutorial interativo.

Comece agora mesmo