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?
Réponses
Trop de publicités? 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}'
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.
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 :{}
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
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.