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.
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.



