Desde la página man:
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>".
Así que eliminé un montón de twigs usando
git push origin :staleStuff
y luego corrió
git remote prune origin
Sin embargo, solo una sola twig local fue podada. Algunas de estas twigs fueron creadas por mí, algunas por compañeros de trabajo. ¿Esto indica que no estaba rastreando esas twigs correctamente en primer lugar?
Cuando usas el git push origin :staleStuff
, elimina automáticamente origin/staleStuff
, por lo que cuando origin/staleStuff
git remote prune origin
origin/staleStuff
, has eliminado alguna twig que otro eliminó. Es más probable que sus compañeros de trabajo ahora necesiten ejecutar git prune
para deshacerse de las twigs que ha eliminado.
Entonces, ¿qué hace exactamente git remote prune
? Idea principal: las twigs locales (no rastrear twigs) no son tocadas por git remote prune
command git remote prune
y deben eliminarse manualmente.
Ahora, un ejemplo del mundo real para una mejor comprensión:
Tiene un repository remoto con 2 twigs: master
y feature
. Supongamos que está trabajando en ambas twigs, por lo que tiene estas references en su repository local (nombres de reference completos para evitar confusiones):
refs/heads/master
(nombre corto master
) refs/heads/feature
( feature
nombre corto) refs/remotes/origin/master
(nombre corto origin/master
) refs/remotes/origin/feature
(nombre corto origin/feature
) Ahora, un escenario típico:
feature
, la fusiona en master
y elimina la twig de feature
del repository remoto. git fetch
(o git pull
), no se eliminan las references de tu repository local, por lo que aún tienes esas 4 references. git remote prune origin
. feature
ya no existe, por lo que refs/remotes/origin/feature
es una twig obsoleta que debe eliminarse. refs/heads/feature
, porque git remote prune
no elimina ninguna refs/heads/*
. Es posible identificar twigs locales, asociadas con las twigs de seguimiento remoto, por el parámetro de configuration branch.<branch_name>.merge
. Este parámetro no es realmente necesario para que funcione nada (probablemente, excepto git pull
), por lo que podría faltar.
(actualizado con ejemplos e información útil de los comentarios)