Quiero eliminar todas las ramas que se enumeran en la salida de ...
$ git branch
... pero manteniendo la rama actual, en un solo paso . ¿Es eso posible? ¿Si es así, cómo?
git
git-branch
sensorario
fuente
fuente
Respuestas:
Basado en la respuesta de @pankijs, hice dos alias de git:
Para ser añadido
~/.gitconfig
Y, como señaló @torek:
Básicamente, nunca uses la
-force
versión si no estás 300% seguro de que no perderás nada importante. Porque está perdido para siempre .fuente
git branch branchname commitid
eliminará todas las ramas excepto la maestra (reemplace la maestra con la rama que desea conservar, pero luego eliminará la maestra)
fuente
grep -v ^*
.master-copy
, por ejemplogrep -v "^ *master$"
grep -v "master\|my-other-branch"
.primero (cambie a la rama que desea mantener> ex : master ):
segundo ( asegúrate de estar en maestro )
fuente
git branch -D $(git branch).Trim()
.git branch -d
(o-D
) permite varios nombres de sucursales, pero es un poco complicado proporcionar automáticamente "todas las sucursales locales, excepto la que tengo ahora" sin escribir al menos un poco de código.El método "mejor" (formalmente correcto) es utilizar
git for-each-ref
para obtener los nombres de las ramas:pero luego es aún más difícil averiguar en qué rama estás (
git symbolic-ref HEAD
es el método "formalmente correcto" para esto, si quieres escribir un script elegante).Más convenientemente, puede usar
git branch
, que imprime los nombres de sus sucursales locales precedidos por dos espacios o (para la sucursal actual) por un asterisco*
. Entonces, ejecute esto a través de algo para eliminar la*
versión y quedará con nombres de rama separados por espacios, que luego puede pasar agit branch -d
:o:
Tenga en cuenta que las minúsculas
-d
no eliminarán una rama "no fusionada completamente" (consulte la documentación). El uso-D
eliminará dichas ramas, incluso si esto hace que las confirmaciones se "pierdan"; utilícelo con mucho cuidado, ya que también borra los reflogs de la rama, por lo que las cosas habituales de "recuperación de borrado accidental" tampoco funcionan.fuente
git branch -D $(git branch | grep -v '^*')
, si desea eliminar las ramas que se han fusionado.Para eliminar todas las ramas fusionadas (excepto la actual
-v ‘*’
):también hice ese comando para la limpieza completa del repositorio:
tomado de aquí .
fuente
Elimina todas las ramas excepto una rama específica :
Eliminar todas las ramas locales excepto desarrollar y master
fuente
Para Windows, en Powershell use:
fuente
Una vez creé esta construcción para mi entorno Windows. Quizás ayude a alguien más. Durante la ejecución, el maestro y la rama actual no se eliminan . Todas las demás ramas fusionadas se eliminarán independientemente.
fuente
Para eliminar todas las ramas excepto la rama actual en un solo paso:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
fuente
Elimine todas las ramas fusionadas localmente:
Elimina todas las ramas excepto una rama específica :
Eliminar todas las ramas locales excepto desarrollar y master
fuente
Suponiendo que
git branch
muestra la rama actual con el prefijo*
; Al usar Powershell, el siguiente trazador de líneas eliminará todas las ramas que no comiencen con*
.git branch | ? { $_ -lt "*" } | % { git branch -D $_.Trim() }
?
= Dónde-Objeto%
= Objeto Foreachfuente
Veo un montón de nombres de rama codificados aquí ... Y creo que mi respuesta aquí es más precisa para la parte de la "rama actual" de la pregunta mientras la mantengo en una sola línea y legible para los novatos como yo. Solo para colocar el crédito donde se debe, la respuesta obviamente también se basa en la respuesta de @ pankijs.
git branch | grep -v $(git branch --show-current) | xargs git branch -d
y también tengo un alias en una línea en mi .bash_aliases en Debian.
alias gitbclean='git branch | grep -v $(git branch --show-current) | xargs git branch -d'
(Aunque creo que algunas funciones de bash deben habilitarse para que el subcomando se ejecute en algunas líneas de comando)
fuente
Utilizo esto porque puedo ser más selectivo en lo que no quiero eliminar. Este comando a continuación elimina todas las ramas excepto master, desarrollar y la rama actual.
Así que puse esto en mi
~/.zshrc
fuente
En mi humilde opinión, la forma más segura de eliminar sucursales locales es:
Además, para obtener más información relacionada con este tema, puede encontrar Eliminar todas las ramas de git locales
fuente
gone
marcador que debe usar-vv
(detallado dos veces), mientras-a
que no lo ayudará (también enumera las ramas remotas)