Supprimer toutes les branches mergées
Dans git il est très facile de créer de nouvelles branches. Tellement facile qu’il est courant de se retrouver avec une très longue liste de branches déjà mergées mais qui existent encore, tant sur le serveur distant qu’en local. Les supprimer toutes à la main peut être très fastidieux, alors voici quelques commandes pour nettoyer tout ça :
1 – Supprimer toutes les branches distantes déjà mergées
Pour supprimer toutes les branches distantes déjà mergées, voici une commande qui ne nécessite pas d’avoir déjà checkouté la branche en local.
$ git fetch origin && git checkout master
$ git branch -r --merged | grep -v master | sed -e "s/.* origin\///g" | xargs -n 1 git push origin --delete
Dans les 2 lignes indiquées ci-dessus, il faut penser à remplacer « origin » par le nom du dépôt distant sur lequel on souhaite supprimer les branches mergées (aux 2 emplacements).
Voici un exemple de sortie, indiquant que la branche « feature/super-feature » a été supprimée :
To git@github.com:user/repo.git
- [deleted] feature/super-feature
Et vous pouvez vérifier avec les branches restantes avec la commande
$ git branch -r
2 – Supprimer toutes les branches locales déjà mergées
Pour supprimer toutes les branches locales qui ont déjà été mergées dans la master, la commande est un tout petit peu différente – et beaucoup plus rapide, puisque ça ne nécessite pas de discussion avec le serveur distant.
$ git checkout master && git branch --merged | grep -v master | sed -e "s/.* //g" | xargs -n 1 git branch -d
On note bien ici l’utilisation du « -d » en minuscule, permettant d’être certain de ne supprimer que des branches non mergées.
3 – Le cas des branches sans commit
Il est important de se rappeler que pour git, une branche qui a été créée mais ne comporte aucun commit non présent dans la master, est considérée comme mergée. C’est pourquoi une branche nouvellement créée est supprimée par les différentes commandes indiquées ici.
4 – Un peu de nettoyage après tout ça
Si votre configuration git ne lance pas automatiquement le garbage collector, le lancer à la main peut être utile
$ git gc --auto
EDIT : un petit oubli dans la version originale, le mieux est de se situer sur la branche master pour effectuer les différentes commandes. Elles ont été modifiées en conséquence.
Si vous utilisez le système classique de nommage des branche, il serait dommage de supprimer « develop » 😉 Un petit « grep feature » ou « grep bugfix » dans la liste des branches peut ainsi être moins dangereuse !