git remote prune – n’a pas montré autant de twigs élaguées que prévu

De la page de manuel:

Deletes all stale tracking twigs under . These stale twigs have already been removed from the remote repository referenced by , but are still locally available in "remotes/". 

J’ai donc enlevé un tas de twigs en utilisant

 git push origin :staleStuff 

puis couru

 git remote prune origin 

Cependant, une seule succursale locale a été élaguée. Certaines de ces twigs ont été créées par moi, d’autres par des collègues. Est-ce que cela indique que je ne suivais pas correctement ces twigs en premier lieu?

Lorsque vous utilisez git push origin :staleStuff , il supprime automatiquement origin/staleStuff . Ainsi, lorsque vous avez lancé git remote prune origin , vous avez élagué une twig supprimé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 twigs que vous avez supprimées.


Alors, que fait exactement git remote prune ? Idée principale: les twigs locales (ne pas suivre les twigs) ne sont pas touchées par git remote prune commande git remote prune et doivent être supprimées manuellement.

Maintenant, un exemple concret pour mieux comprendre:

Vous avez un référentiel distant avec 2 twigs: master et feature . Supposons que vous travaillez sur les deux twigs, vous avez donc ces références dans votre référentiel local (des noms de référence complets sont donnés pour éviter toute confusion):

  • refs/heads/master (nom abrégé)
  • refs/heads/feature ( feature nom abrégé)
  • refs/remotes/origin/master (nom abrégé origin/master )
  • refs/remotes/origin/feature (nom abrégé origin/feature )

Maintenant, un scénario typique:

  1. Un autre développeur termine tout le travail sur la feature , le fusionne dans master et supprime la twig de fonctionnalité du référentiel distant.
  2. Par défaut, lorsque vous git fetch (ou git pull ), aucune référence n’est supprimée de votre référentiel local. Vous disposez donc toujours de ces 4 références.
  3. Vous décidez de les nettoyer et de lancer git remote prune origin .
  4. git détecte que la twig ne existe plus, alors refs/remotes/origin/feature est une twig obsolète qui doit être supprimée.
  5. Vous avez maintenant 3 références, y compris refs/heads/feature , car git remote prune ne supprime aucune refs/heads/* .

Il est possible d’identifier les twigs locales, associées aux twigs de suivi à distance, par branch..merge paramètre de configuration branch..merge . Ce paramètre n’est pas vraiment requirejs pour tout ce qui fonctionne (sans doute que git pull ), il est donc possible qu’il manque.

(mis à jour avec exemple et informations utiles à partir des commentaires)