Eliminar todas las ramas locales en Git
-
Script detallado para eliminar todas las ramas locales en Git excepto
master
-
Modifique la secuencia de comandos para eliminar solo las ramas fusionadas con la opción
-d
en Git - Use un script más fácil para eliminar todas las ramas locales en Git
-
Modifique la secuencia de comandos para eliminar ramas locales con nombres similares a
master
Comomaster-prod
en Git - un script corto para eliminar todas las ramas locales en Git
- Comando de eliminación permanente de una línea para eliminar todas las ramas locales en Git
Las ramas locales antiguas abarrotan su repositorio local pero no proporcionan ningún valor adicional. Puede eliminar todas las ramas locales de una sola vez con la ayuda de este tutorial.
Usamos comandos como grep
, xargs
y for-each-ref
para escribir scripts para esta tarea. Mostramos varias opciones para diferentes casos de uso.
También proporcionamos un truco rápido de una línea para eliminar todas las ramas locales al final del tutorial.
Script detallado para eliminar todas las ramas locales en Git excepto master
Escribimos el siguiente script para que Git elimine todas las ramas locales excepto la rama master
.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -D
Este script eliminará todas las ramas locales excepto la rama master
, incluidas las ramas no fusionadas.
Analicemos este script para ver cómo funciona.
-
El
for-each-ref
itera sobre todas las referencias en el repositorio. La cadena deformat
'%refname:short'
extrae un nombre de referencia corto de los iterables yrefs/heads
apunta a susheads
.Pasamos la salida de
for-each-ref
al comandogrep
usando la tubería|
operador. -
El comando
grep
busca en los encabezados de referencia que se le pasan para que coincidan con la cadena de expresiónmaster\|main\|develop
. Esto cubre diferentes nombres para su ramamaster
; es posible que los haya llamadomain
odevelop
. -
La opción
-v
en el comandogrep
es para selección invertida. Por lo tanto, solo seleccionará aquellas ramas aquí que no coincidan con la expresiónmaster\|main\|develop
- esencialmente, selecciona todas las ramas locales excepto elmaster
. -
Finalmente, el comando
xargs
toma todas estas ramas seleccionadas y las pasa como argumentos al comandogit branch -D
. Elgit branch -D
es el comando para forzar la eliminación de todas las ramas pasadas como argumentos.
Modifique la secuencia de comandos para eliminar solo las ramas fusionadas con la opción -d
en Git
Podemos modificar el script anterior para eliminar solo las ramas fusionadas. Sustituimos la opción -D
al final por la opción -d
.
La -d
es una opción de eliminación suave y solo elimina las ramas fusionadas.
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -d
Vemos que first_branch
se fusiona, pero second_branch
no se fusiona.
Nuestro script modificado solo elimina la first_branch
fusionada pero deja la second_branch
no fusionada.
Use un script más fácil para eliminar todas las ramas locales en Git
Algunas personas pueden encontrar el script anterior demasiado complejo y excesivo. Podemos usar un script más fácil para hacer la misma tarea.
git branch | grep -v "master\|main\|develop" | xargs git branch -D
Este script reemplaza el complejo for-each-ref
con el simple comando git branch
.
Por favor, ten en cuenta que Git no recomienda el uso de git branch
en los scripts. Pero a veces podemos desviarnos de la mejor práctica para una solución rápida.
Modifique la secuencia de comandos para eliminar ramas locales con nombres similares a master
Como master-prod
en Git
A veces, su repositorio puede tener ramas con nombres similares a master
. Por ejemplo, algunas de tus ramas podrían tener nombres como master-prod
o master-draft
.
Podemos modificar la expresión regular en nuestro script de "master\|main\|develop"
a "master$\|main$\|develop$"
para lograr esta funcionalidad.
git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D
un script corto para eliminar todas las ramas locales en Git
Podemos pasar expresiones regulares inteligentes a grep
para acortar aún más nuestro script.
git checkout master
git branch | grep -v "^*" |xargs git branch -D
La expresión "^*"
significa todas las ramas que comienzan (^
) con la rama actual (*
). Primero hicimos git checkout master
, por lo que nuestra rama actual es master
.
Por lo tanto, -v "^*"
filtra nuestra rama actual, la master
y elimina todas las demás ramas locales.
Comando de eliminación permanente de una línea para eliminar todas las ramas locales en Git
Finalmente, como prometimos, le mostraremos un comando de eliminación permanente de una sola línea para eliminar todas las ramas locales en Git.
git branch -D $(git branch)
Este comando elimina todas las ramas excepto en la que se encuentra.