En 2022 escribí sobre cómo uso una función de bash para borrar todas las ramas git fusionadas con un solo comando de terminal. Eso funcionaba muy bien para ramas que se han fusionado con un merge tradicional, pero no para las que se han fusionado usando squash and merge. En el equipo donde trabajo actualmente se suelen usar pull requests con squash and merge en GitHub y me gusta mantener mi entorno de desarrollo limpio, así que actualicé la función de limpieza para tener en cuenta las ramas squashadas.
Diferencia entre merge y squash and merge: el merge por defecto en GitHub crea un commit de merge y preserva el historial completo de commits de la rama de funciones. Con git esto se hace usando --no-ff, evitando fast forward y dejando la historia entrelazada. En cambio squash and merge aplasta todos los commits de la rama de funciones en un único commit y lo aplica sobre la rama base como un fast-forward, perdiendo la línea de tiempo individual de la rama de funciones.
Por qué el script original no funciona con ramas squashadas: mi script inicial comprobaba git checkout main && git branch --merged para listar las ramas detectadas como fusionadas. Cuando se hace squash, los commits originales de la rama no quedan en el historial tal cual, así que git sigue viendo esa rama como no fusionada y git branch --merged no la incluye. En la práctica el comando no encuentra ramas para borrar.
Script que detecta y borra ramas squashadas: la solución es comparar el contenido de cada rama local con la rama main actualizada y borrar aquellas cuyo contenido ya está integrado en main. Añade esta función a tu .bashrc o .zshrc, recarga la configuración con source o abriendo una nueva terminal y ejecuta dams dentro de un proyecto git. Aquí tienes la función explicada y lista para pegar:
dams () { echo === Deleting merged and squash-merged branches === git checkout main && git pull && for branch in $(git for-each-ref --format=%(refname:short) --exclude=refs/heads/main refs/heads/) ; do if ! git ls-remote --exit-code --heads origin $branch > /dev/null 2>&1 ; then echo Skipping $branch (not on remote) continue fi if git diff --quiet $branch main ; then git branch -D $branch echo Deleted $branch else echo Keeping $branch (has unmerged changes) fi done echo ?? Done! }
Qué hace el script paso a paso: primero comprueba y actualiza main con git checkout main && git pull para tener la referencia correcta. Luego lista todas las ramas locales excepto main con git for-each-ref y recorre cada nombre en un bucle. Para cada rama se comprueba si existe en el remoto con git ls-remote --exit-code --heads origin rama para evitar borrar ramas que solo están en local. Finalmente git diff --quiet rama main determina si el contenido de la rama ya está presente en main; si no hay diferencias la rama se borra localmente con git branch -D rama. Uso -D para forzar el borrado localmente porque previamente verifico que la rama esté en remoto.
Precauciones: no confíes ciegamente en scripts encontrados en internet para manipular tu repositorio. Revisa y prueba en repositorios de prueba antes de usarlo en trabajo crítico. Si prefieres menos riesgo puedes cambiar git branch -D por git branch -d para que falle si la rama aún no está completamente integrada.
Sobre Q2BSTUDIO: en Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones a medida para empresas. Ofrecemos servicios que van desde desarrollo de aplicaciones y software a medida hasta ciberseguridad y pentesting, pasando por servicios cloud aws y azure y servicios de inteligencia de negocio. Si buscas crear una aplicación personalizada o escalar tu plataforma podemos ayudarte con desarrollo de aplicaciones y software a medida y con soluciones de inteligencia artificial, incluyendo agentes IA y proyectos de ia para empresas, visita nuestra sección de inteligencia artificial. También trabajamos con Power BI y otras herramientas para inteligencia de negocio y ofrecemos servicios gestionados en cloud y seguridad para proteger tus proyectos.
Palabras clave integradas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi. Si necesitas ayuda para integrar este tipo de flujos de trabajo git en tu equipo o para desarrollar procesos automatizados que incluyan limpieza de ramas y despliegues seguros, ponte en contacto con Q2BSTUDIO y te acompañamos en el proceso.