¿Cómo elimino todas las ramas de Git que se han fusionado?

Resuelto Nyambaa asked hace 13 años • 51 respuestas

¿Cómo elimino ramas que ya se han fusionado? ¿Puedo eliminarlas todas a la vez, en lugar de eliminar cada rama una por una?

Nyambaa avatar May 25 '11 22:05 Nyambaa
Aceptado

NOTA: Puede agregar otras ramas para excluir, como master y dev, si su flujo de trabajo las tiene como posible antecesor. Por lo general, me desvío de una etiqueta de "inicio de sprint" y master, dev y qa no son antepasados.


Primero, enumere las ramas de seguimiento local que se fusionaron en forma remota (considere usar -run indicador para enumerar todas las ramas de seguimiento remoto).

git branch --merged

Es posible que veas algunas ramas que no quieras eliminar. Podemos agregar algunos argumentos para omitir ramas importantes que no queremos eliminar como maestra o desarrollar. El siguiente comando omitirá la rama master y todo lo que contenga dev.

git branch --merged| grep -Ev "(^\*|master|main|dev)"

Si desea omitirlo, puede agregarlo al comando egrep como se muestra a continuación. La sucursal skip_branch_nameno será eliminada.

git branch --merged| grep -Ev "(^\*|master|main|dev|skip_branch_name)"

Para eliminar todas las sucursales locales que ya están fusionadas con la sucursal actualmente desprotegida:

git branch --merged | grep -Ev "(^\*|master|main|dev)" | xargs git branch -d

Puede ver que master y dev están excluidos en caso de que sean un antepasado.


Puede eliminar una sucursal local fusionada con:

git branch -d branchname

Si no está combinado, use:

git branch -D branchname

Para eliminarlo del uso remoto:

git push --delete origin branchname

git push origin :branchname    # for really old git

Una vez que elimine la rama del control remoto, puede podarla para deshacerse de las ramas de seguimiento remoto con:

git remote prune origin

o podar ramas individuales de seguimiento remoto, como sugiere la otra respuesta, con:

git branch -dr branchname
Adam Dymitruk avatar May 25 '2011 16:05 Adam Dymitruk

Para eliminar todas las ramas remotas que ya están fusionadas:

git branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin

En versiones más recientes de Git

git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin

ACTUALIZACIÓN (por @oliver; ya que no cabe en el comentario, pero ya hay suficientes respuestas) : si está en la rama ABC, entonces ABC aparecerá en los resultados git branch -r --mergedporque la rama no está especificada, por lo que la rama por defecto es la rama actual y una rama. siempre califica como fusionado consigo mismo (¡porque no hay diferencias entre una rama y ella misma!).

Entonces especifica la rama:

git branch -r --merged master | grep -v master ...

O primer maestro de pago:

git checkout master | git branch -r --merged | grep -v ...
kuboon avatar Aug 09 '2013 08:08 kuboon

Simplemente extendiendo un poco la respuesta de Adam:

Agregue esto a su configuración de Git ejecutandogit config -e --global

[alias]
    cleanup = "!git branch --merged | grep  -v '\\*\\|master\\|develop' | xargs -n 1 -r git branch -d"

Y luego puedes eliminar todas las ramas locales fusionadas haciendo un simple archivo git cleanup.

real_ate avatar Feb 18 '2014 15:02 real_ate

Querrá excluir las ramas y masterde esos comandos.maindevelop

git local claro:

git branch --merged | grep -v '\*\|master\|main\|develop' | xargs -n 1 git branch -d

Borrar git remoto:

git branch -r --merged | grep -v '\*\|master\|main\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin

Sincronizar registro local de sucursales remotas:

git fetch -p
Guido Bouman avatar Jul 03 '2014 16:07 Guido Bouman

Esto también funciona para eliminar todas las ramas fusionadas excepto la maestra.

git branch --merged | grep -v '^* master$' | grep -v '^  master$' | grep -v '^* main$' | grep -v '^  main$' | xargs git branch -d

Editar: También se ignora la rama principal tal como se usa estos días

Ismael Abreu avatar Feb 07 '2013 01:02 Ismael Abreu