W3docs

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.

git switch déplaçant HEAD d'une branche à une autre

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 feature

HEAD 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-feature

C'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 main

Ici, 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 feature

Git 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/feature
Info

Exé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-branch

Si 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

CommandeDescription
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 8f4c2a1

Vous 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 feature

Notez 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 switch et restore ont 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.

Pratique

Pratique
Quelles affirmations concernant 'git switch' sont correctes ?
Quelles affirmations concernant 'git switch' sont correctes ?
Was this page helpful?