tag - poda remota git-no mostrĂ³ tantas ramas podadas como esperaba
para que sirven las ramas git (1)
Cuando utilizas 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 rama que otro eliminó. Es más probable que sus compañeros de trabajo ahora necesiten ejecutar git prune
para deshacerse de las ramas que ha eliminado.
Entonces, ¿qué hace exactamente git remote prune
? Idea principal: las ramas locales (no rastrear ramas) no son tocadas por git remote prune
comando git remote prune
y deben eliminarse manualmente.
Ahora, un ejemplo del mundo real para una mejor comprensión:
Tiene un repositorio remoto con 2 ramas: master
y feature
. Supongamos que está trabajando en ambas ramas, por lo que tiene estas referencias en su repositorio local (nombres de referencia completos para evitar confusiones):
-
refs/heads/master
(nombre cortomaster
) -
refs/heads/feature
(feature
nombre corto) -
refs/remotes/origin/master
(nombre cortoorigin/master
) -
refs/remotes/origin/feature
(nombre cortoorigin/feature
)
Ahora, un escenario típico:
- Algún otro desarrollador finaliza todo el trabajo en la
feature
, la fusiona enmaster
y elimina la rama defeature
del repositorio remoto. - Por defecto, cuando haces
git fetch
(ogit pull
), no se eliminan las referencias de tu repositorio local, por lo que aún tienes esas 4 referencias. - Decide limpiarlos y ejecutar
git remote prune origin
. - git detecta que la rama de
feature
ya no existe, por lo querefs/remotes/origin/feature
es una rama obsoleta que debe eliminarse. - Ahora tiene 3 referencias, incluyendo
refs/heads/feature
, porquegit remote prune
no elimina ningunarefs/heads/*
.
Es posible identificar ramas locales, asociadas con las ramas de seguimiento remoto, por el parámetro de configuración 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)
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 ramas usando
git push origin :staleStuff
y luego corrió
git remote prune origin
Sin embargo, solo una sola rama local fue podada. Algunas de estas ramas fueron creadas por mí, algunas por compañeros de trabajo. ¿Esto indica que no estaba rastreando esas ramas correctamente en primer lugar?