Git switch: 5 techniques de pros à connaître

gitswitch

Techno

git

Auteur

Olivier

Mis à jour le

05/11/2020

Plus que de simples techniques, ces 5 time-killers peuvent te faire gagner un temps précieux. Je te les ai classées par niveau d'expertise, des plus simples aux plus complexes. Avec tout ça git switch n'aura plus de secret pour toi 😎

Pour les rédiger j'ai bien sûr utilisé ces capsules de connaissances git uniquement accessibles sur ledevwebmoderne.fr que je ne saurai trop te conseiller:

Offre git turbo boost

Technique 1 - Faire un aller retour entre ses branches 🌴 ↔ 🌴

Combien de fois, si ce n’est plusieurs fois par jour, on se retrouve à faire des allers-retours entre nos branches ! On se retrouve alors à enchaîner les commandes, de quoi devenir fou 🤪

⚡️ git switch develop
⚡️ git switch master
⚡️ git switch develop
⚡️ git switch master
...

Et s’il existait un raccourci nous permettant d’aller plus vite ?

C’est justement ce que permet la notation - qui te repositionne à ta position précédente. 🥳 Plutôt pratique, non ?

⚡️ git switch develop
Switched to branch 'develop'

⚡️ git switch -
Switched to branch 'master'

⚡️ git switch -
Switched to branch 'develop'

git switch - démo revenir à la position précédente

Technique 2 - Revenir à sa N-ième position 🎯

Revenir à sa position précédente c’est bien, mais on peut aller encore plus loin. Quand on sait que git conserve l’historique de chacun de nos déplacements, pourquoi alors se limiter à la position précédente !

Et c’est là qu’intervient une notation encore plus puissante, la notation @{-n} où n correspond à la n-ième position précédente :

⚡️ git switch @{-1} # équivalent à git switch -
⚡️ git switch @{-2} # avant dernière position
⚡️ git switch @{-3} # avant-avant dernière position
...

Technique 3 - Créer une branche locale à partir d’une branche distante 🌴 ⬅ 🌴🌴🌴

Dans un monde où l’on travaille tout seul, on crée une branche en local sur sa machine, on réalise quelques commits, puis on la pousse sur le dépôt distant. Mais dans la vrai vie on est rarement tout seul, on rejoint des projets clients déjà existants et surtout on travaille en équipe. Donc pour aller aider un collègue qui travaille sur une fonctionnalité, il faut déjà récupérer correctement la branche sur laquelle il travaille. Heureusement pour nous git switch est très bien pensé pour ça et intègre toutes les fonctionnalités dont on a besoin !

Prenons un exemple simple: on a rejoint un nouveau projet et on a sur notre machine que la branche master. Notre collègue développe une fonctionnalité sur la branche dev. Pour récupérer cette branche dev il suffit de lancer:

⚡️ git switch dev

Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'

git switch - démo créer une branche locale à partir d'une branche distante

Et c’est là que git switch assure 💪 car:

  • il va commencer par détecter que la branche dev n’existe pas en local
  • puis il va de lui-même aller chercher sur le dépôt distant une branche du nom de dev
  • puis s’il en trouve une:

    • crée une branche locale dev à partir de la branche distante dev
    • et surtout la configure directement pour nous pour que cette branche locale suive la branche distante
  • et enfin se positionne dessus, il ne nous reste plus qu’à committer !

Donc juste avec cette commande, une nouvelle branche est créée à l’image de la branche distante et en plus elle est configurée. Ce qui veut dire que pour tirer ou pousser du contenu dessus il suffit de faire git push ou git pull.

Technique 4 - Créer une branche locale de nom différent de la branche distante

On est d’accord, pour que les choses restent simples il faut au maximum avoir des noms de branches locales qui correspondent aux noms des branches distantes. Mais parfois il est nécessaire de faire une exception à cette règle. Par chance la solution n’est pas bien compliquée à condition de comprendre les options utilisées:

  • l’option -c (ou --create) va nous permettre de créer une nouvelle branche
  • et l’option --track permet d’indiquer le nom de la branche distante à suivre
⚡️ git switch -c dev-client —track origin/dev

Branch ‘dev-client’ set up to track remote branch ‘dev’ from ‘origin’.
Switched to a new branch ‘dev-client’

Ainsi cet exemple permet de:

  • créer une nouvelle branche locale dev-client
  • de la configurer pour qu’elle suive la branche distante origin/dev (origin correspondant au nom du dépôt distant)
  • puis de basculer sur cette nouvelle branche

Avec ça, tu sais tout ce qu’il y a à savoir sur la création de branche avec git switch.

Technique 5 - Repositionner une étiquette de branche

Cette dernière astuce est vraiment réservée aux experts car même si elle n’est pas bien compliquée, c’est de la dynamite 🧨 et peut avoir des impacts énormes sur le projet.

Techniquement parlant, une branche est ni plus ni moins qu’une “étiquette” qui pointe sur un commit. Et git fait avancer automatiquement cette branche à chaque commit en mettant à jour la référence portée par cette “étiquette”.

Dans cet exemple ta branche master est en C3

git switch - déplacer une étiquette de branche

Pour des raisons qui te sont propres tu veux la déplacer en C1. Pour cela il te faut utiliser l’option -C (et non -c) pour forcer la création de branche à un autre endroit de l’historique, ici le commit C1 pointé par HEAD~2

⚡️ git switch -C master HEAD~2

Reset branch 'master'

git switch - déplacement de l’étiquette de branche

Tu remarqueras que sur le schéma les commits C2 et C3 apparaissent en gris très clair car ils sont dé-référencés. En effet comme ils ne sont plus accessibles via une étiquette de branche, ils ne sont atteignables que par leur référence SHA-1. Et comme un malheur n’arrive jamais seul, même git log ne les fait plus apparaitre.

Maintenant que tu connais les impacts de cette commande, tu pourras l’utiliser à bon escient et sans flipper.

Passe à la vitesse supérieure avec les capsules de connaissance git

Si cet article t'a plu, que tu souhaites aller plus loin dans ta compréhension de git et maîtriser la bête une bonne fois pour toutes, fais-toi plaisir avec ces capsules de connaissances git uniquement accessibles sur ledevwebmoderne.fr:

Offre git turbo boost