Je souhaite que mes référentiels locaux et distants soient toujours synchronisés en termes de branches.
Après un examen de Pull Request sur GitHub, je fusionne et supprime ma branche là-bas (à distance). Comment pourrais-je récupérer ces informations dans mon référentiel local et demander à Git de supprimer également ma version locale de la branche?
git ls-remote
etgit show-ref
.git symbolic-ref
etgit update-ref
.Réponses:
Le moyen rapide
NB: si vous n'êtes pas sur
master
, cela a le potentiel de supprimer la branche. Continuez à lire pour la «meilleure façon».Assurez-vous que nous gardons le maître
Vous pouvez vous assurer que
master
, ou toute autre branche d'ailleurs, ne sera pas supprimée engrep
demandant plus. Dans ce cas, vous iriez:Donc, si nous voulions garder
master
,develop
etstaging
par exemple, nous irions:Faites-en un alias
Comme il est un peu long, vous voudrez peut-être ajouter un alias à votre fichier
.zshrc
ou.bashrc
. Le mien est appelégbpurge
(pourgit branches purge
):Puis rechargez votre
.bashrc
ou.zshrc
:ou
la source
branch
s'agit d'une porcelaine et non d'une commande de plomberie , faites attention aux changements d'interface utilisateur dans les futures versions de Git qui pourraient le casser.master
sera supprimée.grep -Ev '(\*|master|important-branch)'
~/.gitconfig
place, ajoutez ce qui suit à la[alias]
section:gbpurge = !"git branch --merged | grep -Ev '\\*|master|develop|staging' | xargs -n 1 git branch -d"
(pas besoin d'utiliser () dans l'expression grep).J'utilise le même flux avec GitHub, et je n'ai pas trouvé les réponses précédentes satisfaisantes, car les
git branch --merged
branches ont été fusionnées, mais toutes n'ont pas été supprimées à 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
: mettre à jour le statut des succursales localesgit branch -vv
: lister le statut des succursales localesgrep ": gone]"
: filtrer les supprimésawk '{ print $1 }'
: extraire leurs nomsxargs -n 1 git branch -d
: passez le nom à la commande de suppressionRemarque: si vous préférez, vous pouvez utiliser -D au lieu de -d, qui impose la suppression.
Par exemple:
Référence:
http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches
la source
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
Super script et explication, merci pour ça :)branch -vv
montre le dernier message de validation de la branche. Si vous aviez "disparu" dans ce message,grep gone
cela toucherait également cette branche. Donc,grep ": gone]"
est probablement un peu plus sûr à utiliser.awk '$3 $4 ~ /:gone]$/ { print $1 }'
-D
au lieu de-d
cela, c'est la réponse parfaite!essayer:
qui supprime votre branche locale, si sa branche distante correspondante est supprimée.
Actualisé:
La déclaration ci-dessus n'est pas correcte.
En fait, la course
git pull --prune
sera seulement enlever les branches de suivi à distance tels queEnsuite, vous pouvez exécuter
git branch -r
pour vérifier les branches de suivi à distance laissées sur votre machine. Supposons que les branches de gauche soient:ce qui signifie que la branche
origin/fff
est supprimée.Donc, après avoir couru
git pull --prune
, exécutez simplement:git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)
vous pouvez découvrir toutes les succursales locales qui:
puis,
<the command above> | xargs git branch -d
peut tous les supprimer.la source
--prune
indicateur supprimera uniquement les branches de suivi à distance, pas les branches locales.git fetch --prune
, c'est ma façon de choisirgit pull --prune
entraîné "Vous avez demandé à extraire de la télécommande '--prune', mais vous n'avez pas spécifié de branche. Comme il ne s'agit pas de la télécommande configurée par défaut pour votre branche actuelle, vous doit spécifier une branche sur la ligne de commande. "Cela devrait fonctionner pour éviter de supprimer les branches maître et de développement avec la solution acceptée:
la source
Pour les personnes utilisant PowerShell, c'est l'équivalent de la réponse ci - dessus :
git branch -D
chacune des branches trouvéesla source
Rien de tout cela ne fonctionnait pour moi. Vous pouvez voir mon autre réponse ici: https://stackoverflow.com/a/34969726/550454
Mais essentiellement, j'ai maintenant ceci dans mon
~/.gitconfig
:la source
Solution très simple: supprimez votre dépôt local et clonez à nouveau le dépôt distant. Cela peut ne pas sembler très élégant, mais c'est simple et vous comprendrez exactement ce que vous faites sans lire les pages de manuel :-).
la source
J'ai écrit ce one-liner pour lister toutes les branches locales qui n'ont pas de branche distante correspondante:
Une fois cela fait, la suppression de ces branches locales est facile avec
xargs
:la source
master
aussi, cela ne fonctionne pas comme prévu; soyez prudentJe fais juste cela pour supprimer les branches locales fusionnées:
et si vous souhaitez également supprimer les suivis inexistants:
la source
Dans le cas où vous venez de pousser et de fusionner votre branche vers master, procédez comme suit dans git bash:
Si vous êtes actuellement dans cette branche, cela vous repoussera en maître. À ce stade, tirez avec
la source
La réponse votée a le potentiel de supprimer le maître. Considérez l'exemple pratique ci-dessous.
J'avais deux branches de fonctionnalités hemen_README et hemen_BASEBOX qui ont été fusionnées dans develop, puis develop a été fusionnée dans master. Les branches de fonctionnalité hemen_README et hemen_BASEBOX ont été supprimées à distance mais étaient toujours affichées localement. Aussi je ne suis pas sur le maître localement, mais sur le développement.
Dans ce cas
Donc, si j'exécute la commande partielle ci-dessus
Notez qu'il affiche également le maître, qui sera finalement supprimé.
En tout cas j'ai pu le faire. Je partage mon journal de session avec vous sur la façon dont j'ai réalisé cela.
Je viens de vérifier quel sera élagué puis élagué. en regardant la commande de branche ci-dessous, nous nous sommes occupés des télécommandes
Maintenant, allez-y et supprimez les succursales locales
Bon maintenant les branches sont à souhait.
la source