Pour chaque feature / fix de bug / .. je créé une branche différente. Au bout d’un certain temps les branches s’accumulent, pour gagner un peu de place et éviter de chercher sa branche pendant des heures il est nécessaire de faire un peu de ménage et donc de supprimer les vieilles branches. La suppression via un éditeur comme PhpStorm est simple. Il est aussi possible de supprimer les branches Git locales et distantes en ligne de commande.
Suppression des branches GIT locales
git branch -d nom_branche_locale
Une simple ligne de commande suffit pour supprimer d’un coup toutes vos vieilles branches GIT:
git checkout master; git pull; git branch --merged master | grep -v "\*" | grep -v -E "master|develop|release" | xargs -n 1 git branch -d
Dans l’exemple ci dessus, je change de branche pour me placer sur la master, que je mets à jour. Ensuite je ne souhaite supprimer que les branches mergées sur la master et j’exclus les branches appartenant à mon processus de développement (master / develop / release) via le grep -v -E (expression rationnelle étendue).
Suppression des branches GIT distantes
Voici la commande à exécuter (attention à ce que vous faite ! ) :
git push origin :nom_branche_distante
Via un enchaînement de commande, il est possible de supprimer automatiquement toutes les branches qui ont déjà été mergées sur la master (option –merged master).
git checkout master; git pull; git branch -r --merged master | grep -v "\*" | grep -v -E "master|develop|release" | sed -e 's/.*\///g' | xargs -i -n 1 git push origin :{}
Explication de la ligne de commande :
Comme dans le cas d’une suppression en local, je ne souhaite pas supprimer mes branches appartenant à mon processus de développement.
Je commence par chechout la master et la mettre à jour. Il s’agit de la dernière branche de mon processus de développement et c’est la branche qui se trouve en production.
Le sed permet quand à lui de récupérer le nom de la branche, car le git branch -r –merged master retourne quelque chose du genre origin/Bug-01 où Bug-01 est le nom de la branche. Via donc une expression régulière (option -e), je remplace origin/ par rien pour récupérer Bug-01.
Le xarg permet d’exécuter la commande de suppression d’une branche pour tous les résultats du git branch, et ceux un par un (option -n 1).
L’option -i permet d’utiliser le {} qui reprend le nom de la branche.