Je voudrais nettoyer mon dépôt local, qui a une tonne de vieilles branches: par exemple 3.2
, 3.2.1
, 3.2.2
, etc.
J'espérais un moyen sournois d'en supprimer beaucoup à la fois. Comme ils suivent principalement une convention de libération de points, j'ai pensé qu'il y avait peut-être un raccourci pour dire:
git branch -D 3.2.*
et tuez toutes les branches 3.2.x.
J'ai essayé cette commande et cela, bien sûr, n'a pas fonctionné.
git branch -D $(git branch | grep 3.2*)
- cela a fonctionné pour moi. Il supprime les branches dont le nom commence par "3.2".grep
- correspondance de motifs dans la sortie (degit branch
dans ce cas).$()
- signifie exécuter et placer le résultat.|
- enchaînement.-D
une suppression forcée , devrait utiliser-d
dans la plupart des cas pour être plus sûr en premier.Réponses:
Pas avec cette syntaxe. Mais vous pouvez le faire comme ceci:
Fondamentalement, git branch supprimera plusieurs branches pour vous avec une seule invocation. Malheureusement, il ne complète pas le nom de la branche. Bien que, en bash, vous pouvez faire:
la source
git branch -D/-d
travaux fonctionne bien pour moi. Pourrait vouloir mettre à jour le vôtre (peut-être à partir du répertoire contrib git.git le plus récent).git branch | ...
vous pourriez utiliser$(git for-each-ref --format='%(refname:short)' refs/heads/3.*)
. C'est plus long, je sais, mais il est garanti d'être une sortie appropriée, tout engit branch
ayant une jolie sortie avec des choses comme*
et->
(pour les symréfs) qui peuvent vous gâcher dans les scripts / one-liners.grep
alias pour toujours inclure le drapeau--color=always
-git branch -D
jetaiterror: branch 'my_branch' not found.
jusqu'à ce que je coure sans le drapeau de couleur.git branch --merged ${1-$(current_branch)} | grep -v ${1-$(current_branch)} | xargs git branch -d
git branch -D 3.2{,.1,.2}
pour supprimer les trois branches gnu.org/software/bash/manual/html_node/Brace-Expansion.htmlEh bien, dans le pire des cas, vous pouvez utiliser:
la source
| xargs git branch -d
partie pour vérifier ce qui va réellement être supprimé.grep
sortir degit branch
, car il est destiné à la lecture, pas à l'analyse. Pourrait changer à tout moment. utilisez lefor-each-ref
avec les--format
paramètres, comme suggéré dans d'autres réponses, puis combinez-le avec les suggestions de cette réponse.ÉDITER:
Une version plus sûre (suggérée par Jakub Narębski et Jefromi), car la sortie de la branche git n'est pas destinée à être utilisée dans les scripts:
... ou sans xargs:
la source
git branch
sortie pour les scripts. Utilisezgit for-each-ref
.git for-each-ref --format="%(refname:short)" refs/tags/\*@\* | xargs git tag -d
If one or more patterns are given, only refs are shown that match against at least one pattern, either using fnmatch(3) or literally, in the latter case matching completely or from the beginning up to a slash
-D
une suppression forcée , devrait utiliser-d
dans la plupart des cas pour être plus sûr en premier.Vous pouvez utiliser git branch --list pour répertorier les branches éligibles et utiliser git branch -D / -d pour supprimer les branches éligibles.
Un exemple de doublure:
la source
error: branch 'package.json' not found.
. Il semble que le * soit développé trop tôt, et il essaie de supprimer une branche correspondant au nom de chaque fichier et répertoire.gitconfig
git branch --list '3.2.*'
git branch -d (git branch --list '3.2.*').trim()
Récemment, je cherchais une solution au même problème, j'ai finalement trouvé une réponse et cela fonctionne très bien:
Cette solution est géniale et si vous voulez une explication complète de chaque commande et comment elle fonctionne, elle est donnée ici .
la source
Utilisation
la source
alias grefs='git for-each-ref --format="%(refname:short)"'
je peux donc le fairegrefs | grep 'regexpattern' | xargs git branch -D
Vous trouverez peut-être cela utile:
Si vous souhaitez supprimer toutes les branches qui ne sont pas par exemple 'master', 'foo' et 'bar'
grep -v 'quelque chose' est un matcher avec inversion.
la source
-D
option comparer à une autre réponse. Merci pour la réponse ici @Adi. Les solutions fonctionnent pour moi.J'ai mis mes initiales et un tiret (at-) comme les trois premiers caractères du nom de la branche pour cette raison exacte:
la source
Si vous n'êtes pas limité à l'utilisation de l'invite de commande git, vous pouvez toujours exécuter
git gui
et utiliser l'élément de menu Branche-> Supprimer. Sélectionnez toutes les branches que vous souhaitez supprimer et laissez-les déchirer.la source
Solution Powershell:
Si vous exécutez Windows, vous pouvez utiliser PowerShell pour supprimer plusieurs branches à la fois ...
Vous pouvez également affiner le fonctionnement de la correspondance de motifs à l'aide de la commande Select-String de Powershell. Jetez un œil aux documents PowerShell .
la source
Gardez "développer" et supprimez tous les autres en local
la source
J'ai créé une petite fonction qui pourrait être utile en fonction de la réponse fournie par @gawi (ci-dessus).
Ajoutez cela à votre
.bash_profile
et redémarrez votre terminal. Ensuite, vous pouvez appeler à partir de la ligne de commande comme ceci:Remarque
Je l'ai actuellement configuré pour une suppression logicielle, ce qui signifie qu'il ne supprimera pas les branches sauf si elles ont déjà été fusionnées. Si vous aimez vivre sur le bord, changez
-d
en-D
et il supprimera tout avec le préfixe!la source
Si vous avez vraiment besoin de nettoyer toutes vos succursales, essayez
git branch -d $(git branch)
Il supprimera toutes vos succursales fusionnées locales, sauf celle que vous enregistrez actuellement.
C'est un bon moyen de nettoyer votre local
la source
Vous aimerez peut-être ce petit article ... Il tire la liste et demande la confirmation de chaque article avant de supprimer enfin toutes les sélections ...
Utilisez -D pour forcer les suppressions (comme d'habitude).
Pour plus de lisibilité, voici ce découpé ligne par ligne ...
voici l'approche xargs ...
enfin, j'aime avoir ça dans mon .bashrc
Comme ça je peux juste dire
la source
Pour les âmes pures qui utilisent PowerShell ici le petit script
git branch -d $(git branch --list '3.2.*' | %{$_.Trim() })
la source
cela fonctionne correctement pour moi:
supprimer toutes les succursales locales
la source
Utilisez la commande suivante pour supprimer toutes les branches (la branche extraite ne sera pas supprimée).
Edit: j'utilise un Mac Os
la source
Si vous êtes sous Windows, vous pouvez utiliser PowerShell pour ce faire:
remplacer
feature/*
par n'importe quel motif que vous aimez.la source
Vous pouvez utiliser cette commande:
git branch -D $(printf "%s\n" $(git branch) | grep '3.2')
la source
Vous pouvez utiliser
git gui
pour supprimer plusieurs branches à la fois. Depuis l'invite de commande / Bash ->git gui
-> Distant -> Supprimer la branche ... -> sélectionnez les branches distantes que vous souhaitez supprimer -> Supprimer.la source
Je viens de nettoyer un grand nombre de succursales locales / distantes obsolètes aujourd'hui.
Voici comment je l'ai fait:
1. répertoriez tous les noms de branche dans un fichier texte:
git branch -a >> BranchNames.txt
2. ajoutez les branches que je veux supprimer pour commander "git branch -D -r":
git branch -D -r origin / dirA / branch01 origin / dirB / branch02 origin / dirC / branch03 (... ajouter n'importe quel nom de branche)
3. exécutez le cmd
Et celui-ci fonctionne tellement plus rapidement et fiable que " git push origin --delete ".
Ce n'est peut-être pas le moyen le plus intelligent comme indiqué dans d'autres réponses, mais celui-ci est assez simple et facile à utiliser.
la source
Si vous avez installé Git GUI, qui est un module complémentaire par défaut pour Windows, alors c'est le plus simple. Vous pouvez utiliser ctrl pour choisir plusieurs branches et les supprimer en un seul clic.
la source
Si vous utilisez Fish shell, vous pouvez tirer parti des
string
fonctions :Ce n'est pas très différent des options Powershell dans certaines des autres réponses.
la source
Si vous aviez toutes les branches à supprimer dans un fichier texte (branches-à-del.txt) (une branche par ligne), vous pouvez le faire pour supprimer toutes ces branches de la télécommande (origine):
xargs -a branches-to-del.txt git push --delete origin
la source
Pour supprimer plusieurs branches en fonction d'un modèle spécifié, procédez comme suit:
Ouvrez le terminal ou équivalent et saisissez les commandes suivantes:
Supprimez toutes les branches 3.2.x, vous devez taper
C'est tout!
Tu es prêt!
la source
Comme dans Git, toutes les branches ne sont rien par référence au
.git/ref
dépôt git, pourquoi ne supprimez-vous pas simplement les branches qui vont et puis si quelque chose est laissé de côté qui n'est pas intéressant dans le référentiel sera automatiquement récupéré pour que vous ne le fassiez pas besoin de déranger.la source
git branch -D <branchName>
la source
Vous pouvez supprimer toutes les branches en supprimant toutes les références inutiles:
rm .git/refs/heads/3.2.*
la source
git gc
). Ne fais pas ça.