Eliminar ramas antiguas de un repositorio Git local

git

Al trabajar con Git, en grupos de varios colaboradores, comunmente implica la creaci贸n de varias ramas. Estas ramas se van acumulando en nuestro repositorio local, aunque ya hayan sido eliminadas del repositorio remoto, debido a que las herramientas de Git no hacen este proceso de forma autom谩tica, y no existe un comando de Git que lo haga por nosotros.

Sin embargo, con ayuda de algunos 煤tiles comandos, es posible crear una instrucci贸n que nos permita eliminar las ramas locales que hacen referencia a ramas remotas que ya han sido eliminadas:

git fetch -p && git branch -d `git branch -vv | grep ': gone]' | awk '{print $1}' | xargs`

A continuaci贸n explico paso a paso lo que hace este conjunto de comandos:

PasoComandoDescripci贸n
1git fetch -pObtiene los cambios m谩s recientes desde el repositorio remoto, y elimina ("corta") las referencias a las ramas remotas que ya no existen.
2git branch -vvLista las ramas de forma detallada, lo cual incluye informaci贸n el v铆nculo entre las ramas locales y las referencias a las ramas remotas, as铆 como el estado de las ramas remotas.
3grep ': gone]'Del listado anterior de ramas, filtra aquellas que contengan el texto ': gone]', es decir, aquellas ramas cuyas ramas remotas vinculadas ya fueron eliminadas. Estas ramas eliminadas poseen el estado gone.
4awk '{print $1}De la lista filtrada, obtiene la primera columna, la cual contiene el nombre de la rama local.
5xargsConvierte las filas de nombres de ramas en una cadena de una sola l铆nea, separando el contenido de cada fila mediante un espacio en blanco.
6git branch -dElimina las ramas listadas en el paso anterior. Al utilizar la d minuscula, se indica que no se forzar谩 la eliminaci贸n de ramas, lo que previene que se eliminen ramas locales que no hayan sido combinadas (merged) a otras ramas.

Esta serie de comandos trabaja solamente con el repositorio local, por lo que no hay peligro de afectar el repositorio remoto. Sin embargo, recomiendo que te asegures de haber subido (push) los cambios de todas las ramas, para prevenir la eliminaci贸n de ramas locales que a煤n tengan cambios no incluidos en el repositorio remoto.


Gracias por leer. D茅jame un mensaje por si las dudas 馃槈