En medio de la información presentada por git help fetch
, hay este pequeño artículo:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Así que tal vez, git fetch -p
¿es lo que estás buscando?
EDITAR: Ok, para aquellos que aún debaten esta respuesta 3 años después del hecho, aquí hay un poco más de información sobre por qué presenté esta respuesta ...
Primero, el OP dice que quieren "eliminar también aquellas ramas locales que se crearon a partir de esas ramas remotas [que ya no están en el remoto]". Esto no es inequívocamente posible en git
. Aquí hay un ejemplo.
Digamos que tengo un repositorio en un servidor central, y tiene dos ramas, llamadas A
y B
. Si clono ese repositorio en mi sistema local, mi clon tendrá referencias locales (aún no ramas reales) llamadas origin/A
y origin/B
. Ahora digamos que hago lo siguiente:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Los hechos pertinentes aquí son que por alguna razón elegí crear una sucursal en mi repositorio local que tenga un nombre diferente a su origen, y también tengo una sucursal local que (todavía) no existe en el repositorio de origen.
Ahora supongamos que elimino las ramas A
y B
en el repositorio remoto y actualizo mi repositorio local ( git fetch
de alguna forma), lo que hace que mis referencias locales origin/A
y origin/B
desaparezcan. Ahora, mi repo local tiene tres ramas todavía, A
, Z
, y C
. Ninguno de estos tiene una rama correspondiente en el repositorio remoto. Dos de ellos fueron "creados a partir de ... ramas remotas", pero incluso si sé que solía haber una rama llamada B
en el origen, no tengo forma de saber que Z
se creó a partir deB
, porque fue renombrado en el proceso, probablemente por una buena razón. Entonces, realmente, sin algún proceso externo que registre metadatos de origen de rama, o un ser humano que conozca la historia, es imposible saber cuál de las tres ramas, si es que hay alguna, el OP está apuntando para su eliminación. Sin cierta información externa que git
no se mantiene automáticamente para usted,git fetch -p
es lo más cercano posible, y cualquier método automático para intentar literalmente lo que solicitó el OP corre el riesgo de eliminar demasiadas ramas o de perder algunas que el OP de otro modo quiere eliminar
También hay otros escenarios, como si creo tres ramas separadas origin/A
para probar tres enfoques diferentes de algo, y luego origin/A
desaparece. Ahora tengo tres ramas, que obviamente no pueden coincidir con el nombre, pero se crearon a partir de ellas origin/A
, por lo que una interpretación literal de la pregunta de los OP requeriría eliminar las tres. Sin embargo, eso puede no ser deseable, si incluso pudiera encontrar una forma confiable de combinarlos ...