En breve;
- ¿Cómo puedo eliminar múltiples controles remotos fusionados?
Más antecedentes;
Tengo un repositorio de git con decenas de controles remotos que se han fusionado en master. Puedo eliminar estos controles remotos uno a la vez usando:
git push --delete origin myBranch-1234
Sin embargo, este es un proceso lento y tedioso para todos los controles remotos. Entonces estoy probando este comando:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
git branch -r --mergedenumera todos los controles remotos fusionados.
grep originle dice al comando que incluya el origen.
grep -v masterle dice al comando que excluya al maestro.
xargs git push origin --deletele dice al comando que elimine la lista de controles remotos.
En conjunto, espero que esto reúna todos los controles remotos fusionados y los elimine.
Cuando ejecuto el comando anterior, recibo lo siguiente por cada control remoto combinado;
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
Sin embargo, estos controles remotos existen y puedo verificar cada uno de ellos. Muchos sitios y personas recomiendan que corra git fetch --prunepara limpiar las referencias faltantes. Esto no hace nada porque existen todos estos controles remotos.
Así que te pregunto, querido intercambio de pilas;
- ¿Por qué puedo eliminar un control remoto, pero no muchos?
- ¿Es correcto mi comando?
Creo que me falta algo pequeño. Cada vez que investigo esto, parece que lo estoy haciendo correctamente, pero recibo los errores anteriores.
fuente

--prune? En mi opinión, eso es bastante engañosoorigin/en los nombres de las sucursales, como se describe / resuelto en otras respuestas.¿Se eliminan esas ramas del remoto (origen)? Si es así, simplemente puede hacer
De lo contrario, podrían volver incluso después de eliminarlos localmente.
Actualización: mirando su comando nuevamente, parece que lo está construyendo incorrectamente. Probablemente quieras
pero en cambio estás haciendo algo como
fuente
git branch -r --mergedy luego estoy tratando de eliminarlos conxargs git push origin --delete. El comando está intentando eliminar los controles remotos, excepto que cree queremote ref does not exist.xargspara ver qué se ejecuta realmente.origin/prefijo en el nombre de la rama, git ya sabe que está trabajando con las ramas de origen desde que está ejecutandogit push origin. La sugerencia de Mykola fue hacer la última parte del comandoxargs echo, en lugar deecho xargs [...].Use
sedpara eliminar la parte 'origen /' y cambiar unaxargsparte lttile .fuente