Lorsque vous utilisez git push origin :staleStuff
il supprime automatiquement origin/staleStuff
donc quand vous avez exécuté git remote prune origin
vous avez élagué une branche qui avait été enlevée par quelqu'un d'autre. Il est plus probable que vos collègues doivent maintenant exécuter git prune
pour se débarrasser des branches que vous avez retirées.
Alors, quoi exactement git remote prune
fait ? Idée principale : les branches locales (pas les branches de suivi) ne sont pas touchées par git remote prune
et doit être supprimé manuellement.
Maintenant, un exemple concret pour mieux comprendre :
Vous avez un référentiel distant avec 2 branches : master
et feature
. Supposons que vous travaillez sur les deux branches, et que par conséquent vous avez ces références dans votre dépôt local (les noms complets des références sont donnés pour éviter toute confusion) :
-
refs/heads/master
(nom court master
)
-
refs/heads/feature
(nom court feature
)
-
refs/remotes/origin/master
(nom court origin/master
)
-
refs/remotes/origin/feature
(nom court origin/feature
)
Maintenant, un scénario typique :
- Un autre développeur termine tout le travail sur le
feature
et le fusionne avec master
et supprime feature
branche du dépôt distant.
- Par défaut, lorsque vous faites
git fetch
(ou git pull
), aucune référence n'est supprimée de votre référentiel local, vous avez donc toujours ces 4 références.
- Vous décidez de les nettoyer, et vous lancez
git remote prune origin
.
- git détecte que
feature
n'existe plus, donc refs/remotes/origin/feature
est un rassis branche qui doit être supprimée.
- Vous avez maintenant 3 références, dont
refs/heads/feature
parce que git remote prune
ne supprime pas les refs/heads/*
références.
Il est possible d'identifier les branches locales, associées aux branches de suivi à distance, en branch.<branch_name>.merge
paramètre de configuration. Ce paramètre n'est pas vraiment nécessaire pour que tout fonctionne (sauf probablement git pull
), il se peut donc qu'elle soit manquante.
(mis à jour avec un exemple et des informations utiles provenant des commentaires)
8 votes
Pour savoir quelles branches vont être enlevées, vous pouvez faire
git remote show origin
et cherchez les branches marquéesstale