Astuce Git: supprimer toutes les branches mergées

git
astuce

Si vous travaillez avec des branches Git et un système de Pull Requests (ou Merge Requests) pour contribuer à un projet, vous savez probablement que les branches locales peuvent rapidement s'accumuler et devenir obsolètes. En effet, lorsque vous fusionnez une branche, la branche distante est souvent supprimée, mais pas la branche locale que vous avez créée sur votre machine !

Au fil du temps, des dizaines voire des centaines de branches obsolètes peuvent s'accumuler sur votre ordinateur, créant de la confusion et ralentissant les performances de Git.

Pour faire un peu de ménage, voici un script Bash simple qui peut vous aider à maintenir votre repo Git propre et organisé. Ce script supprime toutes les branches locales qui ne sont plus présentes dans la branche distante :

git fetch -p && \for branch in $(git branch -vv | grep -e ': gone]' -e ': disparue]' | awk '{print $1}');do git branch -D $branch;done

Si vous utilisez régulièrement ce script Bash pour supprimer vos branches Git obsolètes, vous pouvez l'ajouter en tant qu'alias Git en ajoutant la ligne suivante à la section [alias] de votre fichier ~/.gitconfig:

~/.gitconfig
[alias]    clean-merged = "!git fetch -p && for branch in $(git branch -vv | grep -e ': gone]' -e ': disparue]' | awk '{print $1}'); do git branch -D $branch; done"

Il vous suffira alors de lancer git clean-merged dans un terminal pour exécuter l'alias.

Comment ça fonctionne

  1. git fetch -p : récupère toutes les branches distantes et supprime les références locales obsolètes correspondantes. En bref, ça synchronise votre repo local avec l'origine.
  2. git branch -vv : affiche toutes les branches locales avec plein d'informations.
  3. grep -e ': gone]' -e ': disparue]' : filtre les branches locales obsolètes qui ne sont plus présentes dans la branche distante. Ce filtre fonctionne avec Git installé en français ou en anglais (j'utilise les deux selon l'environnement)
  4. awk '{print $1}' : extrait juste le nom des branches locales obsolètes filtrées à l'étape précédente.
  5. git branch -D $branch : supprime les branches dont le nom a été extrait à l'étape précédente.

Conclusion

En résumé, ce petit alias Git est un outil simple mais très efficace pour maintenir votre repo Git synchronisé avec l'origine et éviter d'accumuler des branches obsolètes.

Bonne journée !