Nirmalya Ghosh
¿Cómo puedo eliminar ramas en git que comienzan con la letra ‘o’?
Supongamos que tengo una lista de sucursales como la siguiente:
origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma
quiero borrar las ramas origen_alfa, origen_beta y origen_gamma.
hek2mgl
Actualizar el -r
opción a xargs
es un complemento de GNU. A menos que uses xargs
de GNU findutils podría no funcionar. Puede omitirlo, pero eso genera un error si la entrada canalizada a xargs está vacía.
Puedes usar git branch --list <pattern>
y canalizar su salida a xargs git branch -d
:
git branch --list 'o*' | xargs -r git branch -d
Por cierto, hay un problema menor con el código anterior. Si actualmente ha consultado una de las sucursales que comienza con o
la salida de git branch --list 'o*'
se vería así:
* origin_master
origin_test
o_what_a_branch
Tenga en cuenta el asterisco *
delante del nombre de la rama actual.
Si bien no puede eliminar la rama actual de todos modos, esto lleva al hecho de que xargs también pasa *
a git branch delete
.
Como digo es solo un error cosmético, pero si quieres evitarlo usa:
git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d
-
Esto no funcionará si está en una de esas ramas, ya que su salida contendrá el asterisco resaltado. Consulte la respuesta stackoverflow.com/a/3670560/283078.
– cmbuckley
10 de noviembre de 2015 a las 13:51
-
Cambié a maestro y apliqué este código. Resolvió mi problema. Gracias.
– Nirmalya Ghosh
10 de noviembre de 2015 a las 13:51
-
@cmbuckley
git branch -d <branch>
tampoco funcionaría si estás en esa rama. 😉 Es por eso que he ignorado eso.– hek2mgl
10 de noviembre de 2015 a las 13:53
-
Acabo de probar en una Mac: xargs no acepta
-r
(illegal option -- r
) pero funcionó sin él para el propósito deseado.–Amy Pellegrini
22 de agosto de 2018 a las 10:55
-
FYI Las comillas simples me matan en Windows ahora mismo
git branch --list 'hotfix'
no muestra nada perogit branch --list "hotfix"
Hace el truco– PandaWood
6 oct 2020 a las 23:49
lzzluca
Otra forma podría ser esta:
git branch -d $(git branch | grep yourSearchPattern)
a mí me parece más intuitivo porque grep es algo que uso a diario.
También puede hacer un alias de él (o también de cualquier solución sugerida aquí), verifique, por ejemplo, aquí cómo pasar argumentos a un alias:
http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
PD: en su caso específico, yourSearchPattern podría ser el origen:
git branch -d $(git branch | grep origin)
PPS como siguiente paso, también sería bueno hacer que el proceso de eliminación sea más detallado, por ejemplo, sería bueno que tenga que confirmar la eliminación para cada rama. Pero creo que eso supera la pregunta…
-
Estoy en Windows en este momento, y aunque tengo el conjunto completo de comandos de Unix, como grep, su sugerencia aquí, por ejemplo
git branch -d $(git branch | grep hotfix)
falla conerror: branch '$(git' not found
– PandaWood
23 de julio de 2018 a las 0:27
-
A primera vista: es
$()
Win lo reconoce correctamente? parece que git está tratando de eliminar la rama$(git
en lugar de reemplazarlo con la salida del comando– lzzluca
24 de julio de 2018 a las 12:05
-
Sería genial ver la elaboración de lo que hace la primera línea de código después de “-d”.
– Eduardo
30 de julio de 2018 a las 12:10
austin pb
git branch -D $(git branch --list 'regex_here')
Ejemplo: \
git branch -D $(git branch --list 'aputhen/*')
Elimina todas las sucursales cuyo nombre comienza con aputhen/
.
Agregar el script que uso en PowerShell (Windows)
Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }
Llegar tarde a la fiesta, pero otra forma de hacerlo es
git branch -d `git branch | grep substring`
y para la pregunta actual
git branch -d `git branch | grep origin`
Esto eliminará todas las sucursales cuyos nombres contengan origen.
Posible duplicado de ¿Puedes eliminar varias ramas en un solo comando con Git?
– cmbuckley
10 de noviembre de 2015 a las 13:42
No conozco ninguna limitación que le impida eliminar esas ramas como lo haría con cualquier otra rama:
git branch -d origin_alpha
– kvdv
10 de noviembre de 2015 a las 13:42
@kvdv Gracias por tu respuesta. Supongamos que tengo 50 ramas que comienzan con la letra ‘o’, entonces no es conveniente eliminar manualmente todas esas ramas. De ahí la pregunta.
– Nirmalya Ghosh
10 de noviembre de 2015 a las 13:46
@cmbuckley Gracias por tu respuesta. Quería eliminar solo aquellas ramas que comienzan con una letra definida. Entonces, mi pregunta es diferente a la que mencionaste.
– Nirmalya Ghosh
10 de noviembre de 2015 a las 13:47
@NirmalyaGhosh no, es lo mismo, pero el partido es
o*
en lugar de3.2*
. Consulte la respuesta stackoverflow.com/a/28614187/283078.– cmbuckley
10 de noviembre de 2015 a las 13:49