Desde la página del manual:
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 se poda una rama local. Algunas de estas ramas fueron creadas por mí, otras por compañeros de trabajo. ¿Esto indica que no estaba rastreando esas ramas correctamente en primer lugar?
git
version-control
branch
git-branch
git-remote
Felixyz
fuente
fuente
git remote show origin
y el aspecto de las ramas marcadasstale
Respuestas:
Cuando lo usa
git push origin :staleStuff
, se elimina automáticamenteorigin/staleStuff
, por lo que cuando ejecutagit remote prune origin
, ha podado alguna rama que alguien más eliminó. Es más probable que sus compañeros de trabajo ahora necesiten corrergit prune
para deshacerse de las ramas que ha eliminado.Entonces, ¿qué
git remote prune
hace exactamente ? Idea principal: las ramas locales (no las ramas de seguimiento) no se tocan con elgit remote prune
comando y deben eliminarse manualmente.Ahora, un ejemplo del mundo real para una mejor comprensión:
Tiene un repositorio remoto con 2 ramas:
master
yfeature
. Supongamos que está trabajando en ambas ramas, por lo que tiene estas referencias en su repositorio local (se dan los nombres de referencia completos para evitar confusiones):refs/heads/master
(nombre cortomaster
)refs/heads/feature
(nombre cortofeature
)refs/remotes/origin/master
(nombre cortoorigin/master
)refs/remotes/origin/feature
(nombre cortoorigin/feature
)Ahora, un escenario típico:
feature
, lo fusionamaster
y elimina lafeature
rama del repositorio remoto.git fetch
(ogit pull
), no se eliminan referencias de su repositorio local, por lo que todavía tiene las 4 referencias.git remote prune origin
.feature
rama ya no existe, por lo querefs/remotes/origin/feature
es una rama obsoleta que debe eliminarse.refs/heads/feature
, porquegit remote prune
no elimina ningunarefs/heads/*
referencia.Es posible identificar sucursales locales, asociadas con sucursales de seguimiento remoto, por
branch.<branch_name>.merge
parámetro de configuración. Este parámetro no es realmente necesario para que nada funcione (probablemente exceptogit pull
), por lo que podría faltar.(actualizado con ejemplos e información útil de los comentarios)
fuente
git prune
. Solo las ramas de adentro/refs/remotes/<remote_name>/
están sujetas a poda; las ramas de/refs/heads/
no se tocarán; debe administrarlas manualmente.branch.<branch_name>.merge
parámetro de configuración.