Cuando lo usa git push origin :staleStuff
, se elimina automáticamente origin/staleStuff
, por lo que cuando ejecuta git remote prune origin
, ha podado alguna rama que alguien más eliminó. Es más probable que sus compañeros de trabajo ahora necesiten correr git 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 el git 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
y feature
. 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 corto master
)
refs/heads/feature
(nombre corto feature
)
refs/remotes/origin/master
(nombre corto origin/master
)
refs/remotes/origin/feature
(nombre corto origin/feature
)
Ahora, un escenario típico:
- Algún otro desarrollador termina todo el trabajo en el
feature
, lo fusiona master
y elimina la feature
rama del repositorio remoto.
- De forma predeterminada, cuando lo hace
git fetch
(o git pull
), no se eliminan referencias de su repositorio local, por lo que todavía tiene las 4 referencias.
- Decides limpiarlos y correr
git remote prune origin
.
- git detecta que la
feature
rama ya no existe, por lo que refs/remotes/origin/feature
es una rama obsoleta que debe eliminarse.
- Ahora tiene 3 referencias, incluidas
refs/heads/feature
, porque git remote prune
no elimina ninguna refs/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 excepto git pull
), por lo que podría faltar.
(actualizado con ejemplos e información útil de los comentarios)
git remote show origin
y el aspecto de las ramas marcadasstale