Git Switch vs Git Checkout: Qual a Diferença?

GitGitBeginner
Pratique Agora

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Neste laboratório, você aprenderá as principais diferenças entre os comandos git switch e git checkout. Explorará quando e por que usar cada comando, juntamente com exemplos práticos e casos de uso para ajudá-lo a otimizar seu fluxo de trabalho Git.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/status -.-> lab-391555{{"Git Switch vs Git Checkout: Qual a Diferença?"}} git/branch -.-> lab-391555{{"Git Switch vs Git Checkout: Qual a Diferença?"}} git/checkout -.-> lab-391555{{"Git Switch vs Git Checkout: Qual a Diferença?"}} end

Entendendo o Git Checkout

O comando git checkout é um comando Git fundamental usado para alternar entre branches ou restaurar arquivos da árvore de trabalho. Ele atualiza os arquivos em seu diretório de trabalho para corresponder à versão na branch ou commit especificado.

Vamos começar explorando como usar git checkout para alternar entre branches.

Primeiro, certifique-se de estar no diretório do projeto:

cd ~/project

Agora, vamos verificar a branch atual. Por padrão, após git init, você está na branch main ou master (dependendo da sua configuração Git). Na configuração deste laboratório, criamos uma feature-branch.

git branch

Você deve ver uma saída semelhante a esta, indicando a branch atual com um asterisco:

  feature-branch
* main

Agora, use git checkout para alternar para a feature-branch:

git checkout feature-branch

Você verá uma saída confirmando a troca:

Switched to branch 'feature-branch'

Vamos verificar a branch atual novamente:

git branch

A saída agora deve mostrar que você está na feature-branch:

* feature-branch
  main

Você usou com sucesso git checkout para alternar entre branches.

Entendendo o Git Switch

O comando git switch é um comando mais recente introduzido no Git 2.23, projetado especificamente para alternar entre branches. Ele visa fornecer uma separação mais clara de preocupações em comparação com o comando sobrecarregado git checkout.

Vamos usar git switch para voltar para a branch main.

Certifique-se de estar no diretório do projeto:

cd ~/project

Agora, use git switch para alternar para a branch main:

git switch main

Você verá uma saída confirmando a troca:

Switched to branch 'main'

Vamos verificar a branch atual novamente:

git branch

A saída agora deve mostrar que você está em main:

* main
  feature-branch

Você usou com sucesso git switch para alternar entre branches. Observe que a saída é semelhante à de git checkout ao alternar entre branches.

Criando e Alternando Branches com Git Switch

Uma das funcionalidades convenientes do git switch é a capacidade de criar uma nova branch e alternar para ela em um único comando usando a opção -c (ou --create).

Vamos criar uma nova branch chamada development e alternar para ela.

Certifique-se de estar no diretório do projeto:

cd ~/project

Agora, use git switch -c para criar e alternar para a branch development:

git switch -c development

Você verá uma saída indicando que uma nova branch foi criada e que você alternou para ela:

Switched to a new branch 'development'

Vamos verificar a branch atual e listar todas as branches:

git branch

A saída deve mostrar a nova branch development e indicar que você está atualmente nela:

  feature-branch
  main
* development

Isso demonstra como git switch -c simplifica o processo de criação e trabalho imediato em uma nova branch.

Restaurando Arquivos com Git Checkout

Embora git switch seja principalmente para alternar branches, git checkout retém a funcionalidade para restaurar arquivos. Esta é uma diferença chave em seu uso pretendido.

Vamos fazer uma alteração em file1.txt e, em seguida, usar git checkout para descartar as alterações e restaurar o arquivo ao seu estado na branch atual (development).

Certifique-se de estar no diretório do projeto:

cd ~/project

Adicione algum conteúdo a file1.txt:

echo "Additional content" >> file1.txt

Verifique o status do arquivo:

git status

A saída mostrará que file1.txt foi modificado:

On branch development
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")

Agora, use git checkout -- para descartar as alterações locais em file1.txt:

git checkout -- file1.txt

Verifique o status novamente:

git status

A saída agora deve mostrar que não há alterações no diretório de trabalho:

On branch development
nothing to commit, working tree clean

As alterações que você fez em file1.txt foram descartadas, e o arquivo foi restaurado ao seu estado na branch development. Essa funcionalidade é tratada por git checkout, não por git switch.

Verificando um Commit Específico com Git Checkout

Outra funcionalidade retida por git checkout é a capacidade de verificar um commit específico. Isso coloca você em um estado "detached HEAD" (HEAD destacado), permitindo que você inspecione o projeto naquele ponto da história. git switch não possui essa capacidade.

Primeiro, vamos encontrar o hash do commit do commit inicial.

Certifique-se de estar no diretório do projeto:

cd ~/project

Visualize o histórico de commits:

git log --oneline

Você verá uma saída semelhante a esta, com os hashes dos commits:

<commit_hash_development> (HEAD -> development) Initial commit
<commit_hash_main> (main, feature-branch) Initial commit

Observe que os hashes dos commits serão diferentes no seu ambiente. Copie o hash do commit para o "Initial commit".

Agora, use git checkout seguido pelo hash do commit para verificar esse commit específico. Substitua <commit_hash> pelo hash real que você copiou.

git checkout <commit_hash>

Você verá uma saída indicando que você está em um estado detached HEAD:

Note: switching to '<commit_hash>'

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>

HEAD is now at <commit_hash> Initial commit

Você agora está visualizando o projeto como era no momento do commit inicial. Para retornar a uma branch, você pode usar git switch ou git checkout para alternar de volta para uma branch como development ou main.

Vamos alternar de volta para a branch development usando git switch:

git switch development

Você verá uma saída confirmando a alternância:

Switched to branch 'development'

Você usou com sucesso git checkout para explorar um commit específico e, em seguida, retornou a uma branch usando git switch.

Resumo das Diferenças

Para resumir as principais diferenças entre git checkout e git switch:

  • git switch: Usado principalmente para alternar entre branches. É um comando mais novo e focado para esta tarefa específica. Ele também pode criar uma nova branch e alternar para ela (git switch -c).
  • git checkout: Um comando mais versátil que pode alternar branches, mas também tem a capacidade de verificar commits específicos (resultando em um HEAD destacado) e restaurar arquivos (git checkout -- <file>).

Embora git checkout possa realizar a alternância de branches, git switch é o comando recomendado para esse fim em versões mais recentes do Git devido à sua intenção mais clara e separação de preocupações. Use git checkout quando precisar restaurar arquivos ou explorar commits específicos.

Você agora explorou as funcionalidades principais de git checkout e git switch e entende quando usar cada comando em seu fluxo de trabalho Git.

Resumo

Neste laboratório, você aprendeu as diferenças entre os comandos git switch e git checkout. Você praticou a alternância de branches usando ambos os comandos, criando uma nova branch com git switch, restaurando arquivos com git checkout e verificando um commit específico com git checkout. Agora você entende os casos de uso pretendidos para cada comando e como eles contribuem para um fluxo de trabalho Git eficiente.

OSZAR »