Git 🌙
Chapters â–Ÿ 2nd Edition

3.3 Les branches avec Git - Gestion des branches

Gestion des branches

Maintenant que vous avez crĂ©Ă©, fusionnĂ© et supprimĂ© des branches, regardons de plus prĂšs les outils de gestion des branches qui s’avĂšreront utiles lors d’une utilisation intensive des branches.

La commande git branch permet en fait bien plus que la simple création et suppression de branches. Si vous la lancez sans argument, vous obtenez la liste des branches courantes :

$ git branch
  iss53
* master
  testing

Notez le caractĂšre * qui prĂ©fixe la branche master : il indique la branche courante (c’est-Ă -dire la branche sur laquelle le pointeur HEAD se situe). Ceci signifie que si, dans cette situation, vous validez des modifications (grĂące Ă  git commit), le pointeur de la branche master sera mis Ă  jour pour inclure vos modifications. Pour visualiser la liste des derniers commits sur chaque branche, vous pouvez utiliser le commande git branch -v :

$ git branch -v
  iss53   93b412c fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 add scott to the author list in the readmes

--merged et --no-merged sont des options trÚs utiles qui permettent de filtrer les branches de cette liste selon que vous les avez ou ne les avez pas encore fusionnées avec la branche courante. Pour voir quelles branches ont déjà été fusionnées dans votre branche courante, lancez git branch --merged :

$ git branch --merged
  iss53
* master

Comme vous avez dĂ©jĂ  fusionnĂ© iss53 un peu plus tĂŽt, vous la voyez dans votre liste. Les branches de cette liste qui ne comportent pas le prĂ©fixe * peuvent gĂ©nĂ©ralement ĂȘtre effacĂ©es sans risque au moyen de git branch -d puisque vous avez dĂ©jĂ  intĂ©grĂ© leurs modifications dans une autre branche et ne risquez donc pas de perdre quoi que ce soit.

Pour visualiser les branches qui contiennent des travaux qui n’ont pas encore Ă©tĂ© fusionnĂ©s, vous pouvez utiliser la commande git branch --no-merged  :

$ git branch --no-merged
  testing

Ceci affiche votre autre branche. Comme elle contient des modifications qui n’ont pas encore Ă©tĂ© intĂ©grĂ©es, essayer de les supprimer par la commande git branch -d se solde par un Ă©chec :

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

Si vous souhaitez rĂ©ellement supprimer cette branche et perdre ainsi le travail rĂ©alisĂ©, vous pouvez tout de mĂȘme forcer la suppression avec l’option -D, comme l’indique le message.

Astuce

Les options décrites ci-dessus, --merged et --no-merged vont, si on ne leur fournit pas un nom de branche ou de commit comme argument, vous afficher ce qui a été, respectivement, fusionné ou non-fusionné dans votre branche actuelle.

Vous pouvez toujours fournir un argument additionnel pour interroger l’état de fusion par rapport Ă  une autre branche sans extraire cette branche avant, comme lorsqu’on se demande ce qui n’a pas Ă©tĂ© fusionnĂ© dans la branche master.

$ git checkout testing
$ git branch --no-merged master
  topicA
  featureB

Renommer une branche

Attention

Ne renommez pas les branches qui sont encore utilisĂ©es par d’autres collaborateurs. Ne renommez pas une branche telle que master/main/mainline avant d’avoir lu la section « Renommer la branche master ».

Supposez que vous avez une branche appelĂ©e mauvais-nom-de-branche et que vous voulez la changer en nom-de-branche-corrigĂ©, tout en conservant l’historique. Vous voulez aussi changer le nom de la branche sur le serveur distant (GitHub, GitLab, ou tout autre serveur). Comment s’y prendre ?

Renommez la branche localement avec la commande git branch --move :

$ git branch --move mauvais-nom-de-branche nom-de-branche-corrigé

Ceci remplace votre mauvais-nom-de-branche par nom-de-branche-corrigĂ©, mais seulement localement pour l’instant. Pour montrer aux autres la branche corrigĂ©e sur le serveur distant, poussez-la :

$ git push --set-upstream origin nom-de-branche-corrigé

Faisons un point rapide :

$ git branch --all
* nom-de-branche-corrigé
  main
  remotes/origin/mauvais-nom-de-branche
  remotes/origin/nom-de-branche-corrigé
  remotes/origin/main

Notez que vous ĂȘtes sur la branche nom-de-branche-corrigĂ©. La branche corrigĂ©e est disponible sur le serveur distant. Cependant la branche mauvaise est encore aussi prĂ©sente sur le serveur distant. Vous pouvez supprimer la branche mauvaise du serveur distant :

$ git push origin --delete mauvais-nom-de-branche

À prĂ©sent, le mauvais nom de branche est complĂštement remplacĂ© par le nom de branche corrigĂ©.

Changer le nom de la branche master

Avertissement

Changer le nom d’une branche telle que master/main/mainline/default va casser les outils d’intĂ©gration de service et d’aide, ainsi que les scripts de construction/publication que votre dĂ©pĂŽt utilise. Avant de le faire, assurez-vous de tout couvrir avec vos collaborateurs. Assurez-vous aussi de rechercher prĂ©cisĂ©ment et de mettre Ă  jour toutes les rĂ©fĂ©rences Ă  la vieille branche dans votre dĂ©pĂŽt et dans les scripts.

Renommez votre branche locale master en main avec la commande suivante :

$ git branch --move master main

Il n’y a plus de branche master en local, parce qu’elle a Ă©tĂ© renommĂ©e en branche main.

Pour avertir les autres de cette branch main, vous devez la pousser sur le serveur distant Cela rend la branche renommée disponible sur le serveur distant.

$ git push --set-upstream origin main

Enfin, nous finissons dans l’état suivant :

git branch --all
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/main
  remotes/origin/master

Votre branche locale master a disparu, car elle a Ă©tĂ© remplacĂ©e par la branche main. La branche main est aussi disponible sur le serveur distant. Mais le serveur distant a toujours la branche master. Les autres collaborateurs vont continuer Ă  utiliser la branche master comme base pour leurs travaux, jusqu’à ce que vous fassiez quelques modifications supplĂ©mentaires.

Maintenant, vous avez quelques tùches supplémentaires à faire pour terminer la transition :

  • Tous les autres projets dĂ©pendant de celui-ci doivent ĂȘtre avoir leur configuration et leur code modifiĂ©s en consĂ©quence.

  • Mettez Ă  jours tous vos fichiers de configuration de test.

  • Ajustez les scripts de construction et de publication.

  • Redirigez les rĂ©glages sur votre hĂŽte de dĂ©pĂŽt concernant les choses telles que la branche par dĂ©faut du dĂ©pĂŽt, le rĂšgles de fusion et toute autre configuration qui a trait aux noms de branche.

  • Mettez Ă  jour les rĂ©fĂ©rences Ă  l’ancienne branche dans la documentation.

  • Fermez ou fusionnez toutes les demandes de tirage destinĂ©es Ă  l’ancienne branche.

AprĂšs toutes ces tĂąches, et s’ĂȘtre assurĂ© que la branche main se comporte comme la branche master, vous pouvez supprimer la branche master :

$ git push origin --delete master
scroll-to-top