Depuis la page de manuel:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
J'ai donc supprimé un tas de branches en utilisant
git push origin :staleStuff
puis a couru
git remote prune origin
Cependant, une seule branche locale a été élaguée. Certaines de ces succursales ont été créées par moi, d'autres par des collègues. Cela indique-t-il que je n'ai pas suivi correctement ces succursales en premier lieu?
git remote show origin
et rechercher toutes les branches marquéesstale
Réponses:
Lorsque vous utilisez
git push origin :staleStuff
, il supprime automatiquementorigin/staleStuff
, donc lorsque vous avez exécutégit remote prune origin
, vous avez élagué une branche qui a été supprimée par quelqu'un d'autre. Il est plus probable que vos collègues doivent maintenant courirgit prune
pour se débarrasser des branches que vous avez supprimées.Alors que fait exactement
git remote prune
? Idée principale: les branches locales (pas de suivi des branches) ne sont pas touchées par lagit remote prune
commande et doivent être supprimées manuellement.Maintenant, un exemple réel pour une meilleure compréhension:
Vous disposez d'un référentiel distant avec 2 branches:
master
etfeature
. Supposons que vous travaillez sur les deux branches, donc vous avez ces références dans votre référentiel local (les noms de référence complets sont donnés pour éviter toute confusion):refs/heads/master
(nom courtmaster
)refs/heads/feature
(nom courtfeature
)refs/remotes/origin/master
(nom courtorigin/master
)refs/remotes/origin/feature
(nom courtorigin/feature
)Maintenant, un scénario typique:
feature
, le fusionnemaster
et supprime lafeature
branche du référentiel distant.git fetch
(ougit pull
), aucune référence n'est supprimée de votre référentiel local, vous avez donc toujours ces 4 références.git remote prune origin
.feature
branche n'existe plus, ainsirefs/remotes/origin/feature
qu'une branche périmée qui doit être supprimée.refs/heads/feature
, cargit remote prune
ne supprime aucunerefs/heads/*
référence.Il est possible d'identifier les succursales locales, associées aux succursales de suivi à distance, par
branch.<branch_name>.merge
paramètre de configuration. Ce paramètre n'est pas vraiment nécessaire pour que quoi que ce soit fonctionne (probablement saufgit pull
), il peut donc manquer.(mis à jour avec des exemples et des informations utiles à partir des commentaires)
la source
git prune
. Seules les branches en/refs/remotes/<remote_name>/
sont soumises à la taille; aucune succursale/refs/heads/
ne sera touchée - vous devez les gérer manuellement.branch.<branch_name>.merge
paramètre de configuration.