origin - ¿Cómo se elimina una referencia de rama remota no válida de Git?
git push origin master (11)
En mi caso, estaba tratando de eliminar las entradas que se guardaron en .git/packed-refs
. Puede editar este archivo de texto sin formato y eliminar las entradas que git br -D
no sabe cómo tocar (al menos en la versión 1.7.9.5).
Encontré esta solución aquí: https://stackoverflow.com/a/11050880/1695680
En mi repositorio actual tengo la siguiente salida:
$ git branch -a
* master
remotes/origin/master
remotes/public/master
Quiero eliminar remotes/public/master
de la lista de sucursales:
$ git branch -d remotes/public/master
error: branch ''remotes/public/master'' not found.
Además, la salida de git remote
es extraña, ya que no incluye public
:
$ git remote show
origin
¿Cómo puedo eliminar ''remotes / public / master'' de la lista de sucursales?
Actualización, probé el comando git push
:
$ git push public :master
fatal: ''public'' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
La respuesta aceptada no funcionó para mí cuando el árbitro estaba lleno. Esto hace sin embargo:
$ git remote add public http://anything.com/bogus.git
$ git remote rm public
No sabía sobre git branch -rd
, por lo que la forma en que resolví problemas como este es tratar mi repo como un repositorio remoto y hacer una eliminación remota. git push . :refs/remotes/public/master
git push . :refs/remotes/public/master
. Si las otras formas no funcionan y usted tiene alguna referencia extraña de la que quiere deshacerse, esta manera es segura. Le brinda la precisión exacta para eliminar (o crear) cualquier tipo de referencia.
Solo un poco relacionado, pero aún podría ser útil en la misma situación que tuvimos: usamos un recurso compartido de archivos de red para nuestro repositorio remoto. La semana pasada las cosas funcionaron, esta semana recibimos el error "El origen remoto no anunciaba la Ref. Para referencias de sucursales / jefes / maestros. Esta Referencia puede no existir en el control remoto o puede estar oculta por la configuración de permisos"
Pero creíamos que no se había hecho nada para corromper las cosas. El NFS hace instantáneas, así que revisé cada "versión anterior" y vi que hace tres días, el tamaño en MB del repositorio había pasado de 282 MB a 33 MB, y ahora existían aproximadamente 1.403 archivos nuevos y 300 carpetas. Pregunté a mis compañeros de trabajo y uno había tratado de presionar ese día, luego lo cancelé.
Utilicé la funcionalidad "Restaurar" para restaurarlo justo antes de esa fecha y ahora todo funciona bien de nuevo. Probé la poda anteriormente, no parecía ayudar. Tal vez las limpiezas más duras hubieran funcionado.
Espero que esto pueda ayudar a alguien más algún día!
Arrendajo
Todo lo que necesitas hacer es
$ git branch -rd origin/whatever
Es así de simple. No hay razón para llamar a un gc aquí.
Todo lo que necesitas hacer es
git fetch -p
Se eliminarán todas las sucursales locales que se eliminan de forma remota.
Si estás en git 1.8.5+ puedes configurarlo automáticamente
git config fetch.prune true
o
git config --global fetch.prune true
Tuve un problema similar. Ninguna de las respuestas ayudó. En mi caso tuve dos repositorios remotos eliminados que aparecen de forma permanente.
Mi última idea fue eliminar todas las referencias a él a mano.
Digamos que el repositorio se llama "Repo". Yo si:
find .git -name Repo
y borró los archivos y directorios correspondientes.
grep Repo -r .git
Esto encontró algunos archivos de texto en los que quité las líneas correspondientes. Ahora, todo parece estar bien.
Normalmente deberías dejar este trabajo a git.
Usted podría estar necesitando una limpieza
git gc --prune=now
o podrías estar necesitando una ciruela
git remote prune public
ciruela pasa
Borra todas las ramas de seguimiento obsoletas en <nombre>. Estas ramas obsoletas ya se han eliminado del repositorio remoto al que hace referencia <name>, pero aún están disponibles localmente en "remotes / <name>".
Con la opción --dry-run, informe qué ramas se podarán, pero no las pode realmente.
Sin embargo, parece que estos deberían haberse limpiado antes con
git remote rm public
rm
Quite el control remoto llamado <nombre>. Se eliminan todas las ramas de seguimiento remoto y los ajustes de configuración del control remoto.
Por lo tanto, es posible que haya editado manualmente el archivo de configuración y esto no haya ocurrido o que tenga problemas de privilegios.
Tal vez ejecute eso de nuevo y vea qué pasa.
Contexto de asesoramiento
Si echa un vistazo a los registros de revisión , notará que sugerí más técnicas "correctas", que por alguna razón no querían trabajar en su repositorio.
Sospeché que el OP había hecho algo que dejó a su árbol en un estado inconsistente que causó que se comportara un poco de manera extraña, y se requirió que git gc
arreglara el trasero detrás del cruft.
Por lo general, git branch -rd origin/badbranch
es suficiente para enturbiar una sucursal de seguimiento local, o git push origin :badbranch
para git push origin :badbranch
una sucursal remota, y por lo general , nunca necesitará llamar a git gc
git gc --prune=now
no es lo que quieres.
git remote prune public
o git remote prune origin
# si esa es la fuente remota
es lo que quieres
git push origin --delete <branch name>
Referenciado en: http://www.gitguys.com/topics/adding-and-removing-remote-branches/
git push public :master
Esto eliminaría la rama remota llamada master
como Kent Fredric ha señalado.
Para listar las ramas de seguimiento remoto:
git branch -r
Para eliminar una rama de seguimiento remoto:
git branch -rd public/master