137 votes

Supprimer plusieurs branches distantes dans git

J'ai un membre de l'équipe qui, par inadvertance, a déplacé plus de 150 de ses succursales locales vers notre référent central. Heureusement, ils ont tous le même préfixe. En utilisant ce préfixe, y a-t-il une commande git ou un petit script shell cool que je peux utiliser qui supprime tous ceux en même temps?

167voto

neevek Points 4794

Utilisez la commande suivante pour supprimer toutes les branches avec le préfixe PREFIX sur le serveur distant.

 git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
 

Vous voudrez peut-être commencer par un essai pour voir s'il s'agit des branches que vous souhaitez supprimer:

 git branch -r | awk -F/ '/\/PREFIX/{print $2}'
 

108voto

jfeston Points 123

Si vous préférez une approche plus simple, supprimez par exemple 3 ou 4 branches:

 git push origin --delete <branch1> <branch2> <branch3>
 

Important: ne fonctionne que sur Git v1.7.0 et supérieur.

42voto

Dmitriy Points 1324

Grâce à Neevek pour la grande et élégante solution!

Mais j'ai quelques problèmes avec des barres obliques dans les noms de branche (je suis en utilisant Git Flow), en raison de l' awk séparateur de champ / (-F option)

Donc ma solution est basée sur Neevek de l', mais analyse correctement les noms de branche avec /. Dans ce cas, je présume que votre télécommande appelés origin. Commande pour la suppression à distance des branches avec des noms de regarder avec PATTERN:

git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}' | xargs -I {} git push origin :{}

Et n'oubliez pas de vérifier ce que vous allez supprimer:

git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}'

CONSEIL UTILE: Si vos noms de branche (sans origin/ préfixe) stockées dans un fichier texte (un nom de branche par ligne), il suffit d'exécuter:

cat your_file.txt | xargs -I {} git push origin :{}

10voto

lack Points 33

Neevek la solution est élégante, mais elle peut être meilleure: la solution proposée appelle "git push" une fois par branche, ce qui implique un aller-retour par branche d'être supprimé. Depuis que vous utilisez awk de toute façon, pourquoi ne pas l'utiliser pour préfixe": "et puis xargs peut appeler" git push " exactement une fois et supprimer toutes les branches à la fois:

L'exécution de la sec à la liste des branches qui serait supprimé:

git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}'

Solution finale à fait pousser le supprime:

git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}' | xargs git push origin

4voto

user3416278 Points 6

Merci à Neevek. Cela a bien fonctionné après l'avoir reconfiguré pour mes besoins:

branche git -r | awk -Forigin / '// PATTERN / {print $ 2 "/" $ 3} "| xargs -I {} origine du push git: {}

J'avais également besoin de prendre en compte la structure des dossiers. Mes branches de fonctions se trouvent dans une structure de dossiers telle que origin / feature / PREFIX-FEATURENUMBER. Je devais donc construire mon modèle à partir de $ 2 = dossier + $ 3 = nom de branche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X