git switch
Apprenez la commande git switch — la façon moderne de changer et créer des branches. Différences avec git checkout, avec des exemples.
Définition
La commande git switch permet de changer la branche sur laquelle vous travaillez. Introduite dans Git 2.23, elle a été extraite de la commande git checkout surchargée pour accomplir une seule tâche clairement : déplacer HEAD vers une autre branche et mettre à jour votre arbre de travail en conséquence. Tout ce qui concerne la restauration de fichiers se trouve désormais dans git restore, ce qui permet à switch de rester concentré sur les branches uniquement.
Cette page couvre le passage à une branche existante, la création d'une branche à la volée, l'extraction d'une branche distante, le transport de modifications non validées, le retour en arrière avec -, et les différences entre git switch et git checkout.
Pourquoi git switch existe
Pendant des années, git checkout gérait deux tâches sans rapport : le changement de branche et la restauration de fichiers dans l'arbre de travail. Cette surcharge facilitait la perte accidentelle du travail — git checkout <file> supprimait silencieusement les modifications, tandis que git checkout <branch> vous déplaçait vers un nouvel emplacement. Git 2.23 a séparé les responsabilités pour que chaque commande soit prévisible : git switch passe d'une branche à l'autre, et git restore récupère les fichiers. Les deux ont été introduits ensemble pour cette raison précise. git checkout n'est pas obsolète et fonctionne toujours, mais pour le travail quotidien sur les branches, git switch est plus clair et plus sûr.
Passer à une branche existante
Pour vous déplacer vers une branche qui existe déjà, nommez-la :
git switch featureHEAD pointe maintenant vers feature, et votre répertoire de travail reflète le dernier commit de cette branche. Si vous avez des modifications non validées qui seraient écrasées, Git s'arrête et vous avertit plutôt que de perdre le travail.
Créer et basculer en une seule étape
Utilisez le drapeau -c (create) pour créer une nouvelle branche et basculer dessus immédiatement :
git switch -c new-featureC'est l'équivalent moderne de git checkout -b new-feature. Vous pouvez également baser la nouvelle branche sur un point de départ spécifique :
git switch -c hotfix mainIci, main est le point de départ : la nouvelle branche hotfix commence au même commit que main, mais les deux divergent ensuite indépendamment. Le point de départ peut être un nom de branche, un tag ou un hash de commit.
Extraire une branche distante
Un cas très courant est de commencer à travailler sur une branche qui existe sur le dépôt distant mais pas encore localement — par exemple après qu'un collègue a poussé une branche feature. Si le nom n'est pas ambigu, basculez simplement dessus :
git fetch
git switch featureGit constate qu'il n'y a pas de branche feature locale, trouve un seul origin/feature, et crée automatiquement une branche feature locale qui la suit. Cette commodité correspond au comportement --guess, qui est activé par défaut. Pour être explicite, ou lorsque plusieurs dépôts distants ont une branche du même nom, nommez vous-même la branche de suivi :
git switch -c feature --track origin/featureExécutez git fetch d'abord. git switch ne peut trouver une branche distante que si votre dépôt local la connaît déjà ; l'extraction met à jour cette liste.
Transporter des modifications non validées vers une autre branche
Par défaut, basculer avec des modifications non validées est possible à condition que ces modifications n'entrent pas en conflit avec la branche cible — Git les conserve dans votre arbre de travail. Si elles seraient écrasées, Git refuse et vous le signale. Pour transporter délibérément des modifications locales conflictuelles et les fusionner dans la nouvelle branche, ajoutez -m (--merge) :
git switch -m other-branchSi vous préférez mettre les modifications de côté proprement et les réappliquer plus tard, utilisez git stash plutôt que de forcer le changement.
Options courantes
| Commande | Description |
|---|---|
git switch <branch> | Bascule vers une branche existante. |
git switch -c <branch> | Crée une nouvelle branche et bascule dessus. |
git switch -c <branch> <start-point> | Crée une branche à partir d'un commit ou d'une branche donnée et bascule dessus. |
git switch - | Revient à la branche précédemment extraite. |
git switch -c <branch> --track <remote>/<branch> | Crée une branche de suivi locale à partir d'une branche distante. |
git switch --detach <commit> | Extrait un commit directement dans un état HEAD détaché. |
git switch -m <branch> | Bascule en fusionnant les modifications locales conflictuelles dans la branche cible. |
git switch -C <branch> | Crée la branche, ou la réinitialise si elle existe déjà, puis bascule dessus. |
git switch --orphan <branch> | Démarre une nouvelle branche sans historique et avec un arbre de travail vide. |
Revenir à l'emplacement précédent
Un simple tiret vous ramène à la branche sur laquelle vous étiez avant :
git switch -C'est pratique lorsque vous naviguez entre deux branches et ne souhaitez pas saisir leurs noms à répétition.
Inspecter un commit sans branche
Pour examiner un ancien commit sans déplacer aucune branche, utilisez --detach. Cela vous place dans un état HEAD détaché — HEAD pointe directement vers un commit au lieu d'un nom de branche :
git switch --detach 8f4c2a1Vous pouvez naviguer et même compiler à partir de là, mais les nouveaux commits ne sont attachés à aucune branche et peuvent être perdus une fois que vous basculez ailleurs. Si vous décidez de les conserver, créez d'abord une branche avec git switch -c <name>.
git switch vs git checkout
Les deux commandes peuvent changer de branche, alors pourquoi préférer switch ? Parce qu'elle ne peut pas toucher vos fichiers par accident. git checkout accepte à la fois des noms de branches et des chemins de fichiers, ce qui signifie qu'une faute de frappe peut silencieusement écraser votre travail. git switch ne traite que des branches ; si vous souhaitez annuler les modifications apportées à un fichier, vous utilisez le clairement nommé git restore.
# Old, overloaded way
git checkout main
git checkout -b feature
# Modern, explicit way
git switch main
git switch -c featureNotez que git checkout peut faire une chose que git switch ne peut pas : opérer sur des fichiers (git checkout -- file.txt). C'est intentionnel : les opérations sur les fichiers appartiennent désormais à git restore.
Commandes connexes
- git checkout — l'ancienne commande polyvalente que
switchetrestoreont remplacée. - git restore — annuler ou récupérer des modifications apportées aux fichiers dans l'arbre de travail.
- git branch — lister, créer, renommer et supprimer des branches.
- git merge — combiner le travail d'une autre branche après être revenu dessus.
- git stash — mettre de côté les modifications non validées avant de changer de branche.