Je souhaite que mes référentiels locaux et distants soient toujours synchronisés en termes de twigs.
Après un examen de la requête Pull sur GitHub, je fusionne et supprime ma twig (remote). 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 twig?
git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
NB: si vous n’êtes pas sur master
, cela peut potentiellement supprimer la twig. Continuez à lire pour la “meilleure façon”.
Vous pouvez vous assurer que le master
, ou toute autre twig, ne soit pas supprimé par un plus grand nombre de grep
. Dans ce cas, vous iriez:
git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d
Donc, si nous voulions restr master
, develop
et develop
staging
par exemple, nous irions:
git branch --merged | grep -v "\*" | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d
Comme c’est un peu long, vous voudrez peut-être append un alias à votre .zshrc
ou .bashrc
. Le mien s’appelle gbpurge
(pour git twigs purge
):
alias gbpurge='git branch --merged | grep -Ev "(\*|master|develop|staging)" | xargs -n 1 git branch -d'
Rechargez ensuite votre .zshrc
.bashrc
ou .zshrc
:
. ~/.bashrc
ou
. ~/.zshrc
J’utilise le même stream avec GitHub, et je n’ai pas trouvé les réponses précédentes satisfaisantes, car les git branch --merged
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
: met à jour le statut des twigs locales git branch -vv
: liste le statut des twigs locales grep ": gone]"
: filtre les supprimés awk '{ print $1 }'
: extraire leurs noms xargs -n 1 git branch -d
: passe le nom à la commande delete Note: si vous préférez, vous pouvez utiliser -D au lieu de -d, qui applique la suppression.
Par exemple:
someUsr@someHost:~/repo$ git branch -a basic-testing integration-for-tests * master origin playground-for-tests test-services remotes/origin/HEAD -> origin/master remotes/origin/basic-testing remotes/origin/master remotes/origin/test-services someUsr@someHost:~/repo$ git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d Fetching origin Deleted branch integration-for-tests (was fbc609a). Deleted branch playground-for-tests (was 584b900). someUsr@someHost:~/repo$ git branch -a basic-testing * master origin test-services remotes/origin/HEAD -> origin/master remotes/origin/basic-testing remotes/origin/master remotes/origin/test-services
Référence:
essayer:
git pull --prune
qui supprime votre twig locale si sa twig distante correspondante est supprimée.
La déclaration ci-dessus n’est pas correcte.
En fait, git pull --prune
ne supprimera que les twigs de suivi à distance telles que
télécommandes / origine / fff télécommandes / origine / dev télécommandes / origine / maître
Ensuite, vous pouvez lancer git branch -r
pour vérifier les twigs de suivi à distance restantes sur votre ordinateur. Supposons que les twigs de gauche sont:
origine / dev origine / maître
ce qui signifie que l’ origin/fff
la twig est supprimée.
Donc, après avoir lancé git pull --prune
, lancez simplement:
git branch --merged | grep -vFf <(git branch -r | cut -d'/' -f2-)
vous pouvez trouver toutes les twigs locales qui:
puis
peut les supprimer toutes.
Cela devrait éviter de supprimer les twigs master et development avec la solution acceptée:
git branch --merged | egrep -v "^\*|master|development" | xargs -n 1 git branch -d
Pour les utilisateurs de Powershell, c’est l’équivalent de la réponse ci – dessus :
git branch -vv | Select-Ssortingng -Pattern ': gone]' | ForEach-Object{($_ -split "\s+")[1]} | %{ git branch -D $_ }
git branch -D
sur chacune des twigs trouvées 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
:
[alias] prune-twigs = !git remote prune origin && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs -r git branch -d
Solution très simple: supprimez votre repo local et clonez-le à nouveau. 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 :-).
J’ai écrit ce one-liner pour lister toutes les twigs locales qui n’ont pas de twig distante correspondante:
diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -
Après cela, la suppression de ces twigs locales est facile avec xargs
:
diff -u <(git branch|sed 's/..//') <(git branch -r|sed 's/..origin\///')|tail -n +4|sed -n "s/^-//p" -|xargs -r git branch -d
Je fais juste cela pour supprimer les twigs locales fusionnées:
git branch -d $(git branch --merged)
et au cas où vous voudriez également supprimer les traces inexistantes:
git pull --prune
Dans le cas où vous venez de pousser et de fusionner votre twig pour la maîsortingser, procédez comme suit dans git bash:
git branch -d branch_name_to_delete
Si vous êtes actuellement dans cette twig, cela vous ramènera à la maîsortingse. À ce stade, tirez avec
git pull
La réponse votée a le potentiel de supprimer master. Consdier l’exemple pratique ci-dessous.
J’ai eu deux twigs de fonctions hemen_README et hemen_BASEBOX qui ont été fusionnées en développement, puis développées et fusionnées en master. Les fonctions hemen_README et hemen_BASEBOX ont été supprimées à distance, mais elles étaient toujours affichées localement. Aussi je ne suis pas sur le master localement, mais sur le développement.
Dans ce cas
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) hemen_BASEBOX a535c0f added global exec paths to puppet manifest hemen_README ba87489 Updated Readme with considerable details master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/hemen_BASEBOX a535c0f added global exec paths to puppet manifest remotes/origin/hemen_README ba87489 Updated Readme with considerable details remotes/origin/master 2f093ce Merged in develop (pull request #3)
Donc, si je lance la commande partielle ci-dessus
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch --merged | grep -v "\*" hemen_BASEBOX hemen_README master
Notez qu’il montre aussi master, qui sera éventuellement 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.
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin --dry-run Pruning origin URL: [email protected]:hemenkapadiapublic/vagrant-webdev.git * [would prune] origin/hemen_BASEBOX * [would prune] origin/hemen_README hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git remote prune origin Pruning origin URL: [email protected]:hemenkapadiapublic/vagrant-webdev.git * [pruned] origin/hemen_BASEBOX * [pruned] origin/hemen_README
Je viens de vérifier si je serais élagué puis élagué. en regardant la commande de la twig ci-dessous, nous avons pris soin des télécommandes
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) hemen_BASEBOX a535c0f added global exec paths to puppet manifest hemen_README ba87489 Updated Readme with considerable details master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/master 2f093ce Merged in develop (pull request #3)
Maintenant, allez-y et supprimez les twigs locales
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_BASEBOX Deleted branch hemen_BASEBOX (was a535c0f). hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -d hemen_README Deleted branch hemen_README (was ba87489).
Bon maintenant les twigs sont comme vous le souhaitez.
hemen@hemen-MXC061:~/data/projects/vagrant-webdev$ git branch -v -a * develop 671ad6c Merged in hemen_README (pull request #1) master 8980894 [behind 7] Initial Vagrantfile, works for vagrant up. Also initial .gitignore remotes/origin/develop 671ad6c Merged in hemen_README (pull request #1) remotes/origin/master 2f093ce Merged in develop (pull request #3)