Supprimer toutes les branches mergées

git : supprimer 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.

Vous aimerez aussi...

1 réponse

  1. Tom dit :

    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 !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *