Solución:
ACTUALIZAR:
Puede agregar otras ramas para excluir como master y dev si su flujo de trabajo las tiene como un posible ancestro. Por lo general, me desvío de una etiqueta “sprint-start” y master, dev y qa no son ancestros.
Primero, enumere las ramas de seguimiento local que se fusionaron en remoto (puede considerar usar la marca -r para enumerar todas las ramas de seguimiento remoto como se sugiere en otras respuestas).
git branch --merged
Es posible que vea algunas ramas que no desee eliminar. podemos agregar algunos argumentos para omitir ramas importantes que no queremos eliminar como maestro o desarrollo. El siguiente comando omitirá la rama maestra y todo lo que tenga dev.
git branch --merged| egrep -v "(^*|master|main|dev)"
Si desea omitir, puede agregarlo al comando egrep como se muestra a continuación. La rama skip_branch_name
no se eliminará.
git branch --merged| egrep -v "(^*|master|main|dev|skip_branch_name)"
Para eliminar todas las sucursales locales que ya están fusionadas en la sucursal actualmente desprotegida:
git branch --merged | egrep -v "(^*|master|main|dev)" | xargs git branch -d
Puede ver que el maestro y el desarrollador están excluidos en caso de que sean un antepasado.
Puede eliminar una rama 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 podar para deshacerse de las ramas de seguimiento remoto con:
git remote prune origin
o pode las ramas de seguimiento remoto individuales, como sugiere la otra respuesta, con:
git branch -dr branchname
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
ACTUALIZAR (por @oliver; ya que no cabe en el comentario, pero ya hay suficientes respuestas): si está en la sucursal ABC, ABC aparecerá en los resultados de git branch -r --merged
debido a que la rama no está especificada, la rama predeterminada es la rama actual, y una rama siempre califica como fusionada a sí misma (¡porque no hay diferencias entre una rama y ella misma!).
Entonces, especifique la rama:
git branch -r --merged master | grep -v master ...
O primer maestro de pago:
git checkout master | git branch -r --merged | grep -v ...
Solo extendiendo un poco la respuesta de Adam:
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 puede eliminar todas las ramas combinadas locales haciendo un simple git cleanup
.