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
-d
dans 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 à
master
commemaster-prod
dans 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-ref
itè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/heads
pointent sur leurhead
.Nous passons la sortie de
for-each-ref
à la commandegrep
en utilisant le tube|
opérateur. -
La commande
grep
recherche 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éesmain
oudevelop
. -
L’option
-v
dans la commandegrep
est 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
xargs
prend toutes ces branches sélectionnées et les passe en arguments à la commandegit branch -D
. Legit branch -D
est 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.