Vale lembrar que a partir da versão 2.23.0 do Git (agosto de 2019), foram criados os comandos switch e restore, que servem para substituir algumas funções do git checkout (e também do git reset, entre outros). Embora a documentação diga que ainda são experimentais e podem mudar no futuro, fica aqui como referência.

DESFAZENDO ALTERAÇÃO LOCAL (WORKING DIRECTORY)

Este comando deve ser utilizado quando o arquivo ainda não foi adicionado na staged area.

Em vez de:

git checkout -- meu_arquivo.txt

Podemos usar:

git restore meu_arquivo.txt

DESFAZENDO ALTERAÇÃO LOCAL (STAGING AREA)

Este comando deve ser utilizado quando o arquivo já foi adicionado na staged area.

Em vez de:

git reset HEAD meu_arquivo.txt

Podemos usar:

git restore --staged meu_arquivo.txt

TROCANDO PARA UM BRANCH EXISTENTE

Em vez de:

git checkout bug-123

Podemos usar:

git switch bug-123

Da mesma forma, para voltar ao branch principal, basta fazer git switch main.

CRIAR UM NOVO BRANCH E TROCAR

Em vez de:

git checkout -b bug-456

Podemos usar:

git switch -c bug-456

BAIXAR UM BRANCH REMOTO PARA EDIÇÃO

Em vez de:

git checkout -b bug-123 origin/bug-123

Podemos usar:

git switch -c bug-123 origin/bug-123

Enfim, a ideia básica é que o git checkout fazia muitas coisas (ora trabalhava com branches, ora com arquivos, dependendo dos argumentos que vc usa) e isso acabava tornando-o confuso. Por isso as responsabilidades foram separadas em dois comandos: switch trabalha apenas com branches e restore apenas com arquivos.

Claro que o checkout ainda vai continuar existindo por um bom tempo e é bom saber usá-lo. Mas também é importante saber que os comandos novos existem (há quase 4 anos, e é incrível que a maioria dos tutoriais ainda os ignoram).

Para mais informações:

Inclusive, no último link acima tem uma tabela que resume os principais casos de uso:

Antes Depois
git checkout <branch> git switch <branch>
git checkout não tem equivalente direto (use git status)
git checkout -b <new_branch> [<start_point>] git switch -c <new-branch> [<start-point>]
git checkout -B <new_branch> [<start_point>] git switch -C <new-branch> [<start-point>]
git checkout --orphan <new_branch> git switch --orphan <new-branch>
git checkout --orphan <new_branch> <start_point> git switch <start-point> e depois git switch --orphan <new-branch>
git checkout [--detach] <commit> git switch --detach <commit>
git checkout --detach [<branch>] git switch --detach [<branch>]
git checkout [--] <pathspec>… git restore [--] <pathspec>…
git checkout --pathspec-from-file=<file> git restore --pathspec-from-file=<file>
git checkout <tree-ish> [--] <pathspec>… git restore -s <tree> [--] <pathspec>…
git checkout <tree-ish> --pathspec-from-file=<file> git restore -s <tree> --pathspec-from-file=<file>
git checkout -p [<tree-ish>] [--] [<pathspec>…] git restore -p [-s <tree>] [--] [<pathspec>…]

Existe uma forma de favoritar esse topico? por que para mim que estou começando vai servir muito como um guia.

Muito obrigado por ter feito tao detalhado!.

Por enquanto, o jeito é adicionar nos favoritos do browser mesmo...

Perfeito, melhor até do que a documentação oficial!

Muito bom, meu caro!

Obrigado meu caro! :heart:

eu que estou sofrendo um pouquinho para aprender a usar o switch , mas creio que um conteudo tão rico como esse ajudara e muito :D

O `switch`, como já explicado acima, é bem similar ao `checkout`. Eu não achei o `switch` tão complicado, e na verdade achei até menos confuso, pois ele só lida com branches - diferente do `checkout`, que pode mexer com branches ou arquivos, dependendo de como vc usa. Com `switch`, não tem perigo de se confundir e mexer num arquivo sem querer (e se eu quiser mesmo mexer em arquivos, uso o `restore`).

Excelente complemento! Eh otimo sempre estarmos atualizados e praticar as novas funcionalidades. Alguns videos sobre git que vi recentemente ainda usavam do checkout, mas ja vou atualizar minha lista com esses novos comandos. Obrigado galera!

Vale lembrar que a [documentação](https://git-scm.com/docs/git-switch) diz que tanto `switch` quanto `restore` ainda são experimentais e podem mudar. Por outro lado, já faz quase 4 anos que está assim, e não acho que eles vão deixar de existir. Mas o `checkout` também vai continuar existindo por um bom tempo. De qualquer forma, é importante saber ambos, na minha opinião. `checkout` é mais estável e ainda é o mais usado, tanto que a maioria dos tutoriais por aí ainda ensina somente ele, então precisa saber. Mas acho importante pelo menos saber o básico de `switch` e `restore`, pois caso eles se consolidem mais no futuro, vc já saberá usá-los.