Artigo original: Git Checkout Explained: How to Checkout, Change, or Switch a Branch in Git
Traduzido e adaptado por Daniel Rosa

O comando git checkout faz a troca entre branches ou restaura arquivos da árvore de trabalho. Há diversas opções para esse comando que não serão tratadas aqui, mas que você poderá examinar na documentação do Git (em inglês).

Checkout de um commit específico

Para fazer o checkout de um commit específico, execute o comando:

git checkout id-do-commit-específico

Podemos obter os ids específicos dos commits executando o comando:

git log

Fazer o checkout de uma branch existente

Para fazer o checkout de uma branch existente, execute o comando:

git checkout NOME-DA-BRANCH

Em geral, o Git não permitirá que você faça o checkout de outra branch a menos que seu diretório de trabalho esteja vazio, pois você perderia quaisquer alterações do diretório de trabalho cujo commit ainda não tenha sido realizado. Você tem três opções para lidar com suas alterações: 1) eliminá-las, 2) fazer o commit delas ou 3) colocá-las em stash (ambos os textos em inglês).

Fazer o checkout para uma nova branch

Para criar e fazer o checkout para uma nova branch com um único comando, você pode usar:

git checkout -b NOME-DA-NOVA-BRANCH

Isso o levará automaticamente para a nova branch.

Fazer o checkout para uma nova branch ou redefinir uma branch para seu ponto inicial

O comando abaixo é semelhante ao de fazer o checkout para uma nova branch, mas usa a flag -B (observe o B maiúscula) e um parâmetro opcional PONTO-INICIAL:

git checkout -B NOME-DA-BRANCH PONTO-INICIAL

Se a branch NOME-DA-BRANCH não existir, o Git criará essa branch e a iniciará no PONTO-INICIAL. Se a branch NOME-DA-BRANCH existir, o Git reiniciará a branch em PONTO-INICIAL. Isso é o equivalente a usar git branch com -f.

Forçar um checkout

Você pode passar a opção -f ou --force com o comando git checkout para forçar o Git a alterar as branches, mesmo que você tenha alterações que não passaram por staging (em outras palavras, o índice da árvore de trabalho difere de HEAD). Basicamente, essa opção pode ser usada para descartar alterações locais.

Ao executar o seguinte comando, o Git ignorará entradas cujo merging não foi realizado:

git checkout -f NOME-DA-BRANCH

# Alternativa
git checkout --force NOME-DA-BRANCH

Desfazer alterações em seu diretório de trabalho

Você pode usar o comando git checkout para desfazer alterações que você fez em um arquivo no seu diretório de trabalho. Isso reverterá o arquivo de volta para a versão que está em HEAD:

git checkout -- NOME-DO-ARQUIVO