Section courante

A propos

Section administrative du site

git-switch

Échanger
Git

Syntaxe

git switch [options] [--no-guess] branch
git switch [options] --detach [start-point]
git switch [options] (-c|-C) new-branch [start-point]
git switch [options] --orphan new-branch

Paramètres

Nom Description
branch Ce paramètre permet d'indiquer une branche vers laquelle basculer.
new-branch Ce paramètre permet d'indiquer le nom de la nouvelle branche.
start-point Ce paramètre permet d'indiquer le point de départ de la nouvelle branche. Spécifier un start-point vous permet de créer une branche basée sur un autre point de l'historique que celui où HEAD pointe actuellement. (Ou, dans le cas de --detach, vous permet d'inspecter et de vous détacher d'un autre point.) Vous pouvez utiliser la syntaxe @ {- N} pour faire référence à la N-ième dernière branche / commit commutée en utilisant l'opération «git switch» ou «git checkout». Vous pouvez également spécifier - qui est synonyme de @ {- 1}. Ceci est souvent utilisé pour basculer rapidement entre deux branches ou pour annuler un changement de branche par erreur. Comme cas particulier, vous pouvez utiliser A ... B comme raccourci pour la base de fusion de A et B s'il y a exactement une base de fusion. Vous pouvez omettre au plus l'un des points A et B, auquel cas il est défini par défaut sur HEAD.
-c new-branch Ce paramètre permet de créer une nouvelle branche nommée new-branch à partir de start-point avant de passer à la branche.
-C new-branch Ce paramètre permet de créer une nouvelle branche sauf que si new-branch existe déjà, alors il sera réinitialisé à start-point.
--conflict=style Ce paramètre permet de forcer la fusion, mais modifie la présentation des éléments en conflit, en remplaçant la variable de configuration merge.conflictStyle. Les valeurs possibles sont merge (par défaut) et diff3 (en plus de ce qui est indiqué par le style merge, affiche le contenu d'origine).
--create new-branch Ce paramètre permet de créer une nouvelle branche nommée new-branch à partir de start-point avant de passer à la branche.
-d Ce paramètre permet de passer à un commit pour l'inspection et les expériences jetables.
--detach Ce paramètre permet de passer à un commit pour l'inspection et les expériences jetables.
--discard-changes Ce paramètre permet de continuer même si l'index ou l'arborescence de travail diffère de HEAD. L'index et l'arborescence de travail sont restaurés pour correspondre à la cible de git switch. Si --recurse-submodules est spécifié, le contenu du sous-module est également restauré pour correspondre à la cible de git switch. Il est utilisé pour rejeter les changements locaux.
-f Ce paramètre permet de continuer même si l'index ou l'arborescence de travail diffère de HEAD. L'index et l'arborescence de travail sont restaurés pour correspondre à la cible de git switch. Si --recurse-submodules est spécifié, le contenu du sous-module est également restauré pour correspondre à la cible de git switch. Il est utilisé pour rejeter les changements locaux.
--force Ce paramètre permet de continuer même si l'index ou l'arborescence de travail diffère de HEAD. L'index et l'arborescence de travail sont restaurés pour correspondre à la cible de git switch. Si --recurse-submodules est spécifié, le contenu du sous-module est également restauré pour correspondre à la cible de git switch. Il est utilisé pour rejeter les changements locaux.
--force-create new-branch Ce paramètre permet de créer une nouvelle branche sauf que si new-branch existe déjà, alors il sera réinitialisé à start-point.
--guess Ce paramètre permet, si branch n'est pas trouvé mais qu'il existe une branche de suivi dans exactement à distance (appelez remote) avec un nom correspondant, traiter comme équivalent à «git switch -c branch --track remote/branch». Si la branche existe dans plusieurs à distances et que l'une d'elles est nommée par la variable de configuration checkout.defaultRemote, vous l'utilisez à des fins de clarification, même si le branch n'est pas unique sur toutes ceux à distances. Réglez-le sur par exemple sur checkout.defaultRemote=origin pour toujours extraire les branches à distances à partir de là si branch est ambigu mais existe sur l'origine à distance.
--ignore-other-worktrees Ce paramètre permet de vérifier la référence de toute façon. La commande git switch refuse lorsque la référence recherchée est déjà extraite par un autre arbre de travail. En d'autres termes, la référence peut être détenue par plus d'un arbre de travail.
-m Ce paramètre permet d'indiquer que si vous avez des modifications locales à un ou plusieurs fichiers étant différentes entre la branche courante et la branche vers laquelle vous basculez, la commande refuse de changer de branche afin de conserver vos modifications en contexte. Cependant, avec cette option, une fusion à trois voies entre la branche actuelle, le contenu de votre arbre de travail et la nouvelle branche est effectuée, et vous serez sur la nouvelle branche. Lorsqu'un conflit de fusion se produit, les entrées d'index pour les chemins en conflit ne sont pas fusionnées et vous devez résoudre les conflits et marquer les chemins résolus avec git add (ou git rm si la fusion doit entraîner la suppression du chemin).
--merge Ce paramètre permet d'indiquer que si vous avez des modifications locales à un ou plusieurs fichiers étant différentes entre la branche courante et la branche vers laquelle vous basculez, la commande refuse de changer de branche afin de conserver vos modifications en contexte. Cependant, avec cette option, une fusion à trois voies entre la branche actuelle, le contenu de votre arbre de travail et la nouvelle branche est effectuée, et vous serez sur la nouvelle branche. Lorsqu'un conflit de fusion se produit, les entrées d'index pour les chemins en conflit ne sont pas fusionnées et vous devez résoudre les conflits et marquer les chemins résolus avec git add (ou git rm si la fusion doit entraîner la suppression du chemin).
--no-guess Ce paramètre permet de désactiver le comportement du paramètre --guess.
--no-progress Ce paramètre permet d'interdire l'affichage de la progression.
--no-recurse-submodules Ce paramètre permet de pas mettre à jour le contenu de tous les sous-modules actifs en fonction du commit enregistré dans le superprojet.
--no-track Ce paramètre permet de ne pas configurer la configuration en amont, même si la variable de configuration branch.autoSetupMerge est true.
--orphan new-branch Ce paramètre permet de créer une nouvelle branche orpheline, nommée new-branch. Tous les fichiers de suivis sont supprimés.
--progress Ce paramètre permet d'indiquer le rapport de progression même s'il n'est pas connecté à un terminal, quel que soit --quiet. L'état de progression est signalé par défaut sur le flux d'erreur standard lorsqu'il est connecté à un terminal, sauf si --quiet est spécifié.
-q Ce paramètre permet d'enlever et supprimer les messages de rétroaction.
--quiet Ce paramètre permet d'enlever et supprimer les messages de rétroaction.
--recurse-submodules Ce paramètre permet de mettre à jour le contenu de tous les sous-modules actifs en fonction du commit enregistré dans le superprojet. Si rien (ou --no-recurse-submodules) n'est utilisé, les arborescences de travail des sous-modules ne seront pas mises à jour. Tout comme la commande git submodule, elle détachera HEAD des sous-modules.
-t Ce paramètre permet de configurer la configuration en amont lors de la création d'une nouvelle branche. Le paramètre -c est implicite. Si aucun paramètre -c n'est donnée, le nom de la nouvelle branche sera dérivé de la branche de suivi à distance, en regardant la partie locale du refspec configuré pour à distance correspondante, puis en dépouillant la partie initiale jusqu'au "*". Cela nous indiquerait d'utiliser hack comme branche locale lors de la dérivation origin/hack (ou remotes/origin/hack, ou même refs/remotes/origin/hack). Si le nom donné n'a pas de barre oblique, ou si la supposition ci-dessus aboutit à un nom vide, la supposition est abandonnée. Vous pouvez explicitement donner un nom avec -c dans un tel cas.
--track Ce paramètre permet de configurer la configuration en amont lors de la création d'une nouvelle branche. Le paramètre -c est implicite. Si aucun paramètre -c n'est donnée, le nom de la nouvelle branche sera dérivé de la branche de suivi à distance, en regardant la partie locale du refspec configuré pour à distance correspondante, puis en dépouillant la partie initiale jusqu'au "*". Cela nous indiquerait d'utiliser hack comme branche locale lors de la dérivation origin/hack (ou remotes/origin/hack, ou même refs/remotes/origin/hack). Si le nom donné n'a pas de barre oblique, ou si la supposition ci-dessus aboutit à un nom vide, la supposition est abandonnée. Vous pouvez explicitement donner un nom avec -c dans un tel cas.

Description

Cette commande permet de changer de branche.

Remarques

Exemples

L'exemple suivante permet de passer à la branche master :

git switch master

Après avoir travaillé dans la mauvaise branche, le passage à la bonne branche se ferait en utilisant si votre branche s'appelle gladir :

git switch gladir

Cependant, votre mauvaise branche et la bonne branche gladir peuvent différer dans les fichiers que vous avez modifiés localement, auquel cas la commande git switch ci-dessus échouerait comme ceci :

error: You have local changes to 'frotz'; not switching branches.

Vous pouvez donner le drapeau -m à la commande, qui essaierait une fusion à trois :

git switch -m gladir

on obtiendrait le résultat suivant :

Auto-merging frotz

Après cette fusion à trois, les modifications locales ne sont pas enregistrées dans votre fichier d'index, donc git diff vous montrerait les modifications que vous avez apportées depuis la pointe de la nouvelle branche. Pour revenir à la branche précédente avant de basculer vers gladir (par exemple la branche master) :

git switch -

Vous pouvez développer une nouvelle branche à partir de n'importe quel commit. Par exemple, passez à "HEAD~3" et créez la branche fixup :

git switch -c fixup HEAD~3

Vous passez à une nouvelle branche fixup. Si vous souhaitez démarrer une nouvelle branche à partir d'une branche à distance du même nom :

git switch gladir

Configuration de la branche new-topic pour suivre la branche à distance new-topic depuis origin :

git switch new-topic

on obtiendrait le résultat suivant :

Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'

Pour vérifier la validation HEAD~3 pour une inspection ou une expérience temporaire sans créer de nouvelle branche :

git switch --detach HEAD~3

on obtiendrait le résultat suivant :

HEAD is now at 9fc977312 Merge branch 'cc/shared-index-permbits'

S'il s'avère que tout ce que vous avez fait vaut la peine d'être conservé, vous pouvez toujours lui créer un nouveau nom (sans changer de nom) :

git switch -c gladirnext


Dernière mise à jour : Vendredi, le 8 Janvier 2021