Git Switch vs Git Checkout

GitGitBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez les différences clés entre les commandes git switch et git checkout. Vous explorerez quand et pourquoi utiliser chaque commande, avec des exemples pratiques et des cas d'utilisation pour vous aider à rationaliser votre flux de travail Git ( Git workflow ).


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"}} git/branch -.-> lab-391555{{"Git Switch vs Git Checkout"}} git/checkout -.-> lab-391555{{"Git Switch vs Git Checkout"}} end

Comprendre Git Checkout

La commande git checkout est une commande Git fondamentale utilisée pour changer de branche ( branch ) ou restaurer des fichiers de l'arbre de travail ( working tree ). Elle met à jour les fichiers dans votre répertoire de travail pour qu'ils correspondent à la version de la branche ou du commit spécifié.

Commençons par explorer comment utiliser git checkout pour basculer entre les branches.

Tout d'abord, assurez-vous d'être dans le répertoire du projet :

cd ~/project

Maintenant, vérifions la branche actuelle. Par défaut, après git init, vous êtes sur la branche main ou master (selon votre configuration Git). Dans la configuration de ce laboratoire, nous avons créé une feature-branch.

git branch

Vous devriez voir une sortie similaire à celle-ci, indiquant la branche actuelle avec un astérisque :

  feature-branch
* main

Maintenant, utilisez git checkout pour passer à la feature-branch :

git checkout feature-branch

Vous verrez une sortie confirmant le changement :

Switched to branch 'feature-branch'

Vérifions à nouveau la branche actuelle :

git branch

La sortie devrait maintenant indiquer que vous êtes sur feature-branch :

* feature-branch
  main

Vous avez utilisé avec succès git checkout pour changer de branche.

Comprendre Git Switch

La commande git switch est une commande plus récente introduite dans Git 2.23, spécialement conçue pour changer de branche (branch). Elle vise à fournir une séparation des préoccupations plus claire par rapport à la commande git checkout, qui est surchargée.

Utilisons git switch pour revenir à la branche main.

Assurez-vous d'être dans le répertoire du projet :

cd ~/project

Maintenant, utilisez git switch pour passer à la branche main :

git switch main

Vous verrez une sortie confirmant le changement :

Switched to branch 'main'

Vérifions à nouveau la branche actuelle :

git branch

La sortie devrait maintenant indiquer que vous êtes sur main :

* main
  feature-branch

Vous avez utilisé avec succès git switch pour changer de branche. Notez que la sortie est similaire à git checkout lors du changement de branche.

Créer et changer de branche avec Git Switch

L'une des fonctionnalités pratiques de git switch est la possibilité de créer une nouvelle branche (branch) et de basculer vers celle-ci en une seule commande en utilisant l'option -c (ou --create).

Créons une nouvelle branche appelée development et passons à celle-ci.

Assurez-vous d'être dans le répertoire du projet :

cd ~/project

Maintenant, utilisez git switch -c pour créer et passer à la branche development :

git switch -c development

Vous verrez une sortie indiquant qu'une nouvelle branche a été créée et que vous êtes passé à celle-ci :

Switched to a new branch 'development'

Vérifions la branche actuelle et listons toutes les branches :

git branch

La sortie devrait afficher la nouvelle branche development et indiquer que vous êtes actuellement dessus :

  feature-branch
  main
* development

Cela démontre comment git switch -c simplifie le processus de création et de travail immédiat sur une nouvelle branche.

Restaurer des fichiers avec Git Checkout

Alors que git switch est principalement utilisé pour changer de branche (branch), git checkout conserve la fonctionnalité de restauration de fichiers. C'est une différence clé dans leur utilisation prévue.

Modifions file1.txt, puis utilisons git checkout pour annuler les modifications et restaurer le fichier à son état dans la branche actuelle (development).

Assurez-vous d'être dans le répertoire du projet :

cd ~/project

Ajoutez du contenu à file1.txt :

echo "Additional content" >> file1.txt

Vérifiez l'état du fichier :

git status

La sortie indiquera que file1.txt a été modifié :

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")

Maintenant, utilisez git checkout -- pour annuler les modifications locales apportées à file1.txt :

git checkout -- file1.txt

Vérifiez à nouveau l'état :

git status

La sortie devrait maintenant indiquer qu'il n'y a aucune modification dans le répertoire de travail (working directory) :

On branch development
nothing to commit, working tree clean

Les modifications que vous avez apportées à file1.txt ont été annulées, et le fichier a été restauré à son état dans la branche development. Cette fonctionnalité est gérée par git checkout, et non par git switch.

Consulter un commit spécifique avec Git Checkout

Une autre fonctionnalité conservée par git checkout est la possibilité de consulter (checkout) un commit spécifique. Cela vous place dans un état "HEAD détaché" (detached HEAD), vous permettant d'inspecter le projet à ce moment précis de l'historique. git switch n'a pas cette capacité.

Tout d'abord, trouvons le hachage (hash) du commit initial.

Assurez-vous d'être dans le répertoire du projet :

cd ~/project

Affichez l'historique des commits :

git log --oneline

Vous verrez une sortie similaire à celle-ci, avec les hachages de commit :

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

Notez que les hachages de commit seront différents dans votre environnement. Copiez le hachage de commit pour le "Initial commit".

Maintenant, utilisez git checkout suivi du hachage de commit pour consulter ce commit spécifique. Remplacez <commit_hash> par le hachage réel que vous avez copié.

git checkout <commit_hash>

Vous verrez une sortie indiquant que vous êtes dans un état HEAD détaché :

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

Vous visualisez maintenant le projet tel qu'il était au moment du commit initial. Pour revenir à une branche, vous pouvez utiliser git switch ou git checkout pour revenir à une branche comme development ou main.

Revenons à la branche development en utilisant git switch :

git switch development

Vous verrez une sortie confirmant le changement :

Switched to branch 'development'

Vous avez utilisé avec succès git checkout pour explorer un commit spécifique, puis vous êtes revenu à une branche en utilisant git switch.

Résumé des différences

Pour résumer les principales différences entre git checkout et git switch :

  • git switch : Principalement utilisé pour basculer entre les branches (branches). Il s'agit d'une commande plus récente et plus ciblée pour cette tâche spécifique. Il peut également créer une nouvelle branche et y basculer (git switch -c).
  • git checkout : Une commande plus polyvalente qui peut basculer entre les branches, mais qui a également la possibilité de consulter des commits spécifiques (ce qui entraîne un HEAD détaché (detached HEAD)) et de restaurer des fichiers (git checkout -- <file>).

Bien que git checkout puisse effectuer le changement de branche, git switch est la commande recommandée à cet effet dans les versions plus récentes de Git en raison de son intention plus claire et de la séparation des préoccupations (separation of concerns). Utilisez git checkout lorsque vous devez restaurer des fichiers ou explorer des commits spécifiques.

Vous avez maintenant exploré les fonctionnalités de base de git checkout et de git switch et vous comprenez quand utiliser chaque commande dans votre flux de travail Git (Git workflow).

Résumé

Dans ce labo, vous avez appris les différences entre les commandes git switch et git checkout. Vous vous êtes entraîné à changer de branche (branch) en utilisant les deux commandes, à créer une nouvelle branche avec git switch, à restaurer des fichiers avec git checkout et à consulter un commit spécifique avec git checkout. Vous comprenez maintenant les cas d'utilisation prévus pour chaque commande et comment elles contribuent à un flux de travail Git (Git workflow) efficace.