poda remota git – no mostró tantas twigs podadas como esperaba

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:

  1. Algún otro desarrollador finaliza todo el trabajo en la feature , la fusiona en master y elimina la twig de feature del repository remoto.
  2. Por defecto, cuando haces git fetch (o git pull ), no se eliminan las references de tu repository local, por lo que aún tienes esas 4 references.
  3. Decide limpiarlos y ejecutar git remote prune origin .
  4. git detecta que la twig de feature ya no existe, por lo que refs/remotes/origin/feature es una twig obsoleta que debe eliminarse.
  5. Ahora tiene 3 references, incluyendo 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)