¿Cómo eliminar las ramas de seguimiento locales que ya no existen remotamente?

Resuelto Alex asked hace 12 años • 40 respuestas

Con git remote prune originpuedo eliminar las sucursales locales que ya no están en el control remoto.

Pero también quiero eliminar las ramas locales que se crearon a partir de esas ramas remotas (sería bueno verificar si no están fusionadas).

¿Cómo puedo hacer esto?

Alex avatar Oct 25 '12 15:10 Alex
Aceptado

Después de la poda, puede obtener la lista de sucursales remotas con git branch -r. La lista de sucursales con su sucursal de seguimiento remoto se puede recuperar con git branch -vv. Entonces, usando estas dos listas puedes encontrar las ramas de seguimiento remoto que no están en la lista de remotos.

Esta línea debería funcionar (requiere bashor zsh, no funcionará con el shell Bourne estándar):

git fetch -p ; git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d

Esta cadena obtiene la lista de sucursales remotas y la pasa a egreptravés de la entrada estándar. Y filtra las ramas que tienen una rama de seguimiento remoto (usando git branch -vvy filtrando las que tienen origin) y luego obtiene la primera columna de esa salida, que será el nombre de la rama. Finalmente, pasando todos los nombres de las ramas al comando de eliminación de ramas.

Dado que está usando la -dopción, no eliminará las ramas que no se hayan fusionado con la rama en la que se encuentra cuando ejecuta este comando.

Schleis avatar Jun 10 '2013 17:06 Schleis

Si desea eliminar todas las ramas locales que ya están fusionadas en la maestra, puede usar el siguiente comando:

git branch --merged master | grep -v '^[ *]*master$' | xargs -d'\n' git branch -d

Si está utilizando maincomo rama maestra, debe modificar el comando en consecuencia:

git branch --merged main | grep -v '^[ *]*main$' | xargs -d'\n' git branch -d

Más información .

NOTA: xargs -d'\n'el parámetro se utiliza para permitir la eliminación adecuada de ramas con un apóstrofo en el nombre; consulte https://unix.stackexchange.com/questions/38148/why-does-xargs-strip-quotes-from-input .

jackocnr avatar Jun 03 '2013 22:06 jackocnr