¿Cómo elimino todas las ramas de Git que se han fusionado?
¿Cómo elimino ramas que ya se han fusionado? ¿Puedo eliminarlas todas a la vez, en lugar de eliminar cada rama una por una?
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 -r
un 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_name
no 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
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 --merged
porque 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 ...
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
.
Querrá excluir las ramas y master
de esos comandos.main
develop
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
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