Git checkout: alternar branches e restaurar arquivos!

Quando você começa a usar mais Git e explorar mais os seus recursos de branches e restaurar algum histórico, você vai encontrar o git checkout. Inclusive, um dos comandos que mais é seu aliado é o git branch!

A partir do momento que você começa a trabalhar em diferentes fluxos de trabalho, alternando mais entre branches ou até mesmo criando elas, é aqui onde entra o git checkout. Além disso, parar em uma versão específica, desfazer alterações do seu próprio fluxo de trabalho ou de fluxos que já são remotos são outras vantagens desse comando. Vamos conhecer mais sobre ele a seguir: 

O que é o git checkout? 

O git checkout é uma forma de alternar entre versões de arquivos, commits ou branches. Ele tem diferentes formas de usar, mas seus dois principais usos são: trocar de branch ou restaurar arquivos.

Quando você está em um branch e quer trocar para outro você pode usá-lo. Um outro uso, é quando você precisa voltar para uma versão específica de um arquivo ou restaurar apenas aquele arquivo para um commit específico.

Git checkout branch: alternando entre branches

Alternando entre branches existentes

Se você precisa alterar o seu local de trabalho, mudando de branch, é bem simples, basta você usar o comando:

git checkout <nome-do-branch>

Caso você não lembre o nome do branch, você pode listar os branchs com o comando git branch, para conseguir utilizá-lo no git checkout

Criando novos branches com Git checkout

O git checkout é um comando que caminha lado a lado com o git branch. Quando você precisa criar um novo branch, basta usar o comando:

git checkout -b <nome-do-branch>

Esse comando, além de criar, já altera para o branch criado. Ele é uma versão resumida de criar e depois trocar de branch, como a sequência de comandos abaixo:

 git branch <nome-do-branch>
 git checkout <nome-do-branch> 

Git checkout remote branch

Quando trabalhamos em time, é muito comum colaborarmos com branchs remotos. Antes de conseguir acessar um branch remoto, antes você precisa buscar os conteúdos desse branch. Para isso, basta usar o git fetch:

git fetch --all

Depois disso, todos os conteúdos de branches remotos foram buscados e estão disponíveis no seu repositório local. Dessa forma você pode mudar de branch com o git checkout <nome-do-branch>.

Git checkout commit

Para voltar para um commit específico, você pode usar o comando:

git checkout <commit-hash>

Todo commit tem um código hash que o identifica. Para saber o hash de cada commit, você pode usar o comando git log e o resultado aparecerá nesse formato:

 commit <hash>
 Author:
 Date:  
 <mensagem-do-commit> 

Git checkout tag: ver uma versão anterior do seu código

Você pode ir para uma versão específica do seu código usando tags. Para verificar quais tags já estão disponíveis no seu ambiente local, basta você usar o comando git tag. Caso a tag que você precisa não estiver nesta lista, você pode buscar todas as tags, usando git fetch: 

git fetch --all --tags

Quando souber qual a tag específica que quer fazer o checkout, já criando um novo branch a partir dela, basta rodar o comando:

git checkout tags/<tag>

Git detached HEAD: o que é e como solucionar?

Ao usar o git checkout com tags ou com commits, você deve ter percebido uma mensagem diferente e também que algo mudou quanto ao branch que você está. O HEAD é como se fosse um ponteiro que indica a versão atual do branch que você está trabalhando. 

Quando fazemos checkout de um commit ou tag e aparece a detached HEAD, é como se você estivesse em um local separado e fora do branch atual. Ou seja, tudo que você fizer a partir dali não pertence a nenhum branch específico e você pode inclusive perder aquele código. Para resolver esse problema, você precisa criar um novo branch a partir desse novo estado e para não perder as suas alterações.

Opções para usar em conjunto

<nome-do-branch>

Para alternar entre branches, basta usar git checkout <nome-do-branch>. Caso precise listar todos os nomes de branches, só usar git branch antes. Também pode ser usado para commits e tags.

-b <novo-branch>

Para criar um novo branch, use a opção -b. Além de criar, ele também já verifica se existe um outro branch com o mesmo nome.  

<file-path> <commit-hash>

Você pode com essa opção voltar para um commit específico de um determinado arquivo. Se no lugar do hash você colocar HEAD ou até mesmo nada (só o nome do arquivo mesmo), você vai desfazer as alterações locais e voltar para a versão do último commit de um determinado arquivo.

Ao longo desse post, você pode aprender os diferentes usos do git checkout e o quanto ele é útil quando lidamos com branches e históricos de versões. Como vários outros comandos git, você precisa aprender outros comandos em conjunto para trabalhar da melhor forma.

Cada comando git dá suporte a vários outros, por isso a importância de entender e aprender cada vez mais sobre o universo do git. Só nesse post, falamos sobre git fetch, git log, git branch, mas só esses não são suficientes para você conseguir aumentar a sua produtividade e explorar o melhor do Git. 
Por isso, continue estudando mais comandos Git! Aprenda agora mais sobre Git Config!