Supprimer toutes les branches locales dans Git
-
Script détaillé pour supprimer toutes les branches locales dans Git sauf
master -
Modifier le script pour supprimer uniquement les branches fusionnées avec l’option
-ddans Git - Utiliser un script plus simple pour supprimer toutes les branches locales dans Git
-
Modifier le script pour supprimer les branches locales avec des noms similaires à
mastercommemaster-proddans Git - un court script pour supprimer toutes les branches locales dans Git
- Commande de suppression définitive en une ligne pour supprimer toutes les branches locales dans Git
Les anciennes branches locales encombrent votre référentiel local mais n’apportent aucune valeur supplémentaire. Vous pouvez supprimer toutes les branches locales en une seule fois à l’aide de ce tutoriel.
Nous utilisons des commandes telles que grep, xargs et for-each-ref pour écrire des scripts pour cette tâche. Nous montrons différentes options pour différents cas d’utilisation.
Nous fournissons également un hack rapide en une ligne pour supprimer toutes les branches locales à la fin du didacticiel.
Script détaillé pour supprimer toutes les branches locales dans Git sauf master
Nous écrivons le script suivant pour que Git supprime toutes les branches locales à l’exception de la branche master.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -D
Ce script supprimera toutes les branches locales à l’exception de la branche master, y compris les branches non fusionnées.
Décomposons ce script pour voir comment cela fonctionne.
-
Le
for-each-refitère sur toutes les références du référentiel. La chaîneformat'%refname:short'extrait un nom de ref court des itérables et lesrefs/headspointent sur leurhead.Nous passons la sortie de
for-each-refà la commandegrepen utilisant le tube|opérateur. -
La commande
greprecherche les têtes de référence qui lui sont transmises pour correspondre à la chaîne d’expressionmaster\|main\|develop. Cela couvre différents noms pour votre branchemaster- vous les avez peut-être nomméesmainoudevelop. -
L’option
-vdans la commandegrepest pour la sélection inversée. Par conséquent, il ne sélectionnera ici que les branches qui ne correspondent pas à l’expressionmaster\|main\|develop- essentiellement, il sélectionne toutes les branches locales à l’exception dumaster. -
Enfin, la commande
xargsprend toutes ces branches sélectionnées et les passe en arguments à la commandegit branch -D. Legit branch -Dest la commande pour forcer la suppression de toutes les branches passées en arguments.

Modifier le script pour supprimer uniquement les branches fusionnées avec l’option -d dans Git
Nous pouvons modifier le script ci-dessus pour supprimer uniquement les branches fusionnées. Nous remplaçons l’option -D à la fin par l’option -d.
Le -d est une option de suppression douce et ne supprime que les branches fusionnées.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -d

Nous voyons que first_branch est fusionné, mais second_branch n’est pas fusionné.

Notre script modifié ne supprime que la first_branch fusionnée mais laisse la second_branch non fusionnée.
Utiliser un script plus simple pour supprimer toutes les branches locales dans Git
Certaines personnes peuvent trouver le script ci-dessus trop complexe et exagéré. Nous pouvons utiliser un script plus simple pour effectuer la même tâche.
git branch | grep -v "master\|main\|develop" | xargs git branch -D
Ce script remplace le complexe for-each-ref par la simple commande git branch.
Veuillez noter que Git ne recommande pas d’utiliser la branche git dans les scripts. Mais nous pouvons parfois nous écarter des bonnes pratiques pour une solution rapide.

Modifier le script pour supprimer les branches locales avec des noms similaires à master comme master-prod dans Git
Parfois, votre référentiel peut avoir des branches avec des noms similaires à master. Par exemple, certaines de vos branches pourraient avoir des noms comme master-prod ou master-draft.
Nous pouvons modifier l’expression régulière dans notre script de "master\|main\|develop" à "master$\|main$\|develop$" pour obtenir cette fonctionnalité.
git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D


un court script pour supprimer toutes les branches locales dans Git
Nous pouvons passer des expressions régulières astucieuses à grep pour raccourcir davantage notre script.
git checkout master
git branch | grep -v "^*" |xargs git branch -D
L’expression "^*" désigne toutes les branches commençant (^) par la branche courante (*). Nous avons d’abord fait git checkout master, donc notre branche actuelle est master.
Ainsi -v "^*" filtre notre branche actuelle, la master et supprime toutes les autres branches locales.

Commande de suppression définitive en une ligne pour supprimer toutes les branches locales dans Git
Enfin, comme promis, nous vous montrerons une commande de suppression définitive sur une seule ligne pour supprimer toutes les branches locales dans Git.
git branch -D $(git branch)
Cette commande supprime toutes les branches sauf celle sur laquelle vous vous trouvez.
