Pregunta ¿Cómo puedo eliminar todas las ramas de Git que se han fusionado?


Tengo muchas ramas de Git. ¿Cómo elimino las sucursales que ya se han fusionado? ¿Hay alguna manera fácil de eliminarlos todos en lugar de eliminarlos uno por uno?


1312
2018-05-25 15:54


origen


Respuestas:


ACTUALIZAR:

Puede agregar otras ramas para excluir como maestro y dev si su flujo de trabajo tiene esos como un posible antecesor. Por lo general, me ramifico de una etiqueta de "sprint-start" y master, dev y qa no son ancestros.

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

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

Puedes ver que master y dev están excluidos en caso de que sean ancestros.


Puede eliminar una sucursal local fusionada con:

git branch -d branchname

Si no está combinado, use:

git branch -D branchname

Para eliminarlo del control remoto en las versiones anteriores de Git use:

git push origin :branchname

En versiones más recientes de uso de Git:

git push --delete origin branchname

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

git remote prune origin

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

git branch -dr branchname

Espero que esto ayude.


2226
2018-05-25 16:40



Para eliminar todas las ramas en el control remoto 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

316
2017-08-09 08:45



Simplemente extendiendo la respuesta de Adam un poco:

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

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

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


135
2018-02-18 15:08



Esto también funciona para eliminar todas las ramas fusionadas, excepto el maestro.

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

72
2018-02-07 01:06



Querrá excluir el master & develop ramas de esos comandos.

Local git clear:

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

Remote git clear:

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

Sincronizar el registro local de sucursales remotas:

git fetch -p

57
2017-07-03 16:18



Para aquellos de ustedes que están en Windows y prefieren los scripts de PowerShell, aquí hay uno que borra las ramas fusionadas locales:

function Remove-MergedBranches
{
  git branch --merged |
    ForEach-Object { $_.Trim() } |
    Where-Object {$_ -NotMatch "^\*"} |
    Where-Object {-not ( $_ -Like "*master" )} |
    ForEach-Object { git branch -d $_ }
}

32
2018-06-10 14:00



Git Sweep hace un gran trabajo de esto.


19
2018-02-04 13:53



Puede agregar el compromiso a la opción --merced. De esta forma, puede asegurarse de eliminar solo ramas fusionadas, es decir, el origen / maestro

El siguiente comando eliminará las ramas fusionadas de su origen.

git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 git push origin --delete 

Puedes probar qué ramas se eliminarán reemplazando el origen de git push --delete con echo

git branch -r --merged origin/master | grep -v "^.*master" | sed s:origin/:: |xargs -n 1 echo

13
2017-07-08 06:28