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 --merged
enumera todos los controles remotos fusionados.
grep origin
le dice al comando que incluya el origen.
grep -v master
le dice al comando que excluya al maestro.
xargs git push origin --delete
le 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 --prune
para 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 --merged
y 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
.xargs
para 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
sed
para eliminar la parte 'origen /' y cambiar unaxargs
parte lttile .fuente