Supprimer Git local branches après la suppression sur le repo distant
Je veux avoir mon dépôts locales et à distance synchronisation en termes de branches.
Après une Demande d'extraction de l'examen sur GitHub, j'ai fusionner et supprimer ma branche (à distance).
Comment ai-je pu aller chercher cette information dans mon dépôt local et obtenir Git pour supprimer ma version locale de la direction générale ainsi?
- Voulez-vous supprimer votre suivi à distance des branches, les branches locales, ou les deux? Vous pouvez réellement écrire un alias (bash ou git) qui va prendre tous les supprimé les branches distantes, et de trouver des copies locales de supprimer aussi, en une seule commande.
- Peut-être essayer d'utiliser les commandes suivantes pour arriver à quelque chose,
git ls-remote
etgit show-ref
. - Aussi, vous voudrez peut-être consulter
git symbolic-ref
etgit update-ref
. - merci pour votre aide, j'ai fini par trouver la réponse ailleurs. Voir ma réponse.
- double possible de Comment puis-je supprimer toutes les branches git qui ont été fusionnées?
- Connexes: Supprimer une branche Git à la fois localement et à distance.
- Double Possible de Supprimer les branches ne sont plus sur la distance
Vous devez vous connecter pour publier un commentaire.
Le moyen rapide
NB: si vous n'êtes pas sur
master
, cela a le potentiel pour supprimer la branche. Poursuivez votre lecture pour la "meilleure façon".Nous assurer de garder le
Vous pouvez vous assurer que
master
, ou n'importe quelle autre branche de cette question, de ne pas obtenir enlevé pargrep
ing pour plus d'. Dans ce cas, vous devrez aller:Donc, si nous voulions garder
master
,develop
etstaging
par exemple, nous allions:En faire un alias
Depuis c'est un peu long, vous voudrez peut-être ajouter un alias à votre
.zshrc
ou.bashrc
. Le mien est appelégbpurge
(pourgit branches purge
):Puis de recharger votre
.bashrc
ou.zshrc
:ou
branch
est un porcelaine et pas un de plomberie de la commande, attention aux changements de l'INTERFACE dans les futures versions de Git qui peut casser.master
sera supprimé.grep -v "master"
après la première. Vous pouvez suivre cette méthode avec une autre branche que vous voulez conserver.grep -Ev '(\*|master|important-branch)'
~/.gitconfig
au lieu de cela, ajoutez les lignes suivantes à la[alias]
section:gbpurge = !"git branch --merged | grep -Ev '\\*|master|develop|staging' | xargs -n 1 git branch -d"
(pas besoin d'utiliser la () dans l'expression grep).- Je utiliser le même débit avec GitHub, et n'ai pas trouvé les réponses précédentes satisfaisant pour moi, comme
git branch --merged
listes des branches qui ont été fusionnées, mais pas tous d'entre eux a été supprimé à distance dans mon cas.Donc, cela a fonctionné pour moi:
git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d
où:
git fetch --all -p
: mise à jour des branches locales du statutgit branch -vv
: la liste des branches d'étatgrep ": gone]"
: filtre supprimé ceuxawk '{ print $1 }'
: extrait de leurs nomsxargs -n 1 git branch -d
: passer le nom de la commande supprimerRemarque: si vous préférez, vous pouvez utiliser -D au lieu de d, qui applique la supprimer.
Par exemple:
Référence:
http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches
git checkout master; git pull origin master; git fetch --all -p; git branch -vv | grep gone | awk '{ print $1 }' | xargs -n 1 git branch -d
Grande script et les explications, je vous remercie 🙂branch -vv
montre le dernier message de commit de la branche. Si vous arrivé à avoir "disparu" dans ce message, legrep gone
de frapper que la direction de l'. Donc,grep ": gone]"
est probablement un peu plus sûr à utiliser.error: The branch 'feature/SHOP-498' is not fully merged. If you are sure you want to delete it, run 'git branch -D feature/SHOP-498'.
git branch -vv | awk '{ if ($4 == "gone]") print $1 }'
-- un de moins pipe et c'est un peu plus exact, car il ne vérifiegone]
dans la colonne spécifiqueawk '$3 $4 ~ /:gone]$/ { print $1 }'
-D
au lieu de-d
c'est la réponse parfaite!essayer:
qui supprime votre succursale locale, si sa distance correspondante branche est supprimée.
Mise à jour:
La déclaration ci-dessus n'est pas correct.
En fait, l'exécution
git pull --prune
sera SUPPRIMER uniquement la distance de suivi des branches commeEnsuite, vous pouvez exécuter
git branch -r
pour vérifier la distance de suivi des branches laissées sur votre machine. Supposons que la gauche branches sont:ce qui signifie que la direction de la
origin/fff
est supprimé.Donc, après l'exécution de
git pull --prune
, il suffit d'exécuter:git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)
vous pouvez trouver toutes les branches locales qui:
puis,
<the command above> | xargs git branch -d
pouvez supprimer tous les.--prune
drapeau ne supprimer à distance-suivi des branches, pas de branches locales.git fetch --prune
, c'est ma façon de choixgit pull --prune
a entraîné "Vous a demandé de se retirer de la distance '--prune", mais ne précise pas une branche. Parce que ce n'est pas configurée par défaut de la télécommande de votre branche, vous devez spécifier une branche sur la ligne de commande."git fetch origin --prune
peut aider dans le précédent. commentaires casCela devrait fonctionner pour éviter la suppression de la maître et développement branches avec la solution retenue:
Pour les personnes à l'aide de powershell, c'est l'équivalent de la réponse ci-dessus:
git branch -D
sur chacune des branchesSolution très simple: retirez votre local pensions et de cloner la distance à nouveau. Peut ne pas sembler très élégante, mais elle est simple et vous comprendrez exactement ce que vous faites, sans lire les pages man :-).
Rien de tout cela était de travailler pour moi. Vous pouvez voir mon autre réponse ici:
https://stackoverflow.com/a/34969726/550454
Mais, pour l'essentiel, j'ai maintenant dans mon
~/.gitconfig
:Je viens de le faire pour supprimer fusionné branches locales:
et dans le cas où vous souhaitez supprimer inexistante relâchement trop:
J'ai écrit ce one-liner à la liste de toutes les branches locales qui n'ont pas de correspondant branche distante:
Après ce fait, la suppression de ces branches locales est facile avec
xargs
:master
trop, il ne fonctionne pas comme il le devrait; être prudentDans le cas où vous avez juste de pousser et de fusion de votre branche master, puis effectuez les opérations suivantes dans git bash:
Si vous êtes actuellement dans cette branche, il va vous pousser en arrière à maîtriser. À ce stade, faire un pull avec
L'voté réponse n'ont le potentiel pour supprimer maître. Consdier ci-dessous l'exemple pratique.
J'ai eu deux branches hemen_README et hemen_BASEBOX qui ont été fusionnées dans les élaborer et développer ensuite été fusionnés en maître. Les branches hemen_README et hemen_BASEBOX ont été supprimés à distance, mais qui étaient toujours à l'affiche jusqu'au niveau local. Aussi, je ne suis pas sur de maître localement, mais à développer.
Dans ce cas
Donc, si je exécutez la commande partielle
Avis qu'il illustre maître, qui finira par être supprimé.
En tout cas j'ai été en mesure de le faire. Je suis le partage de mon journal de session avec vous sur la façon dont j'ai réalisé que.
Je viens de vérifier whay seront élagués et puis taillé. à la recherche à la direction de la commande ci-dessous, nous avons pris soin de télécommandes
Maintenant aller de l'avant et de supprimer des branches locales
Bon maintenant les branches sont comme souhaité.