Pregunta ¿Cómo se elimina una referencia de sucursal remota no válida de Git?


En mi repositorio actual, tengo el siguiente resultado:

$ git branch -a
* master
  remotes/origin/master
  remotes/public/master

Quiero borrar 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ño, ya que no aparece public:

$ git remote show 
origin

¿Cómo puedo eliminar 'remotes / public / master' de la lista de sucursales?

Actualización, intentado el git push mando:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

659
2017-07-02 02:39


origen


Respuestas:


Es posible que necesites una limpieza

git gc --prune=now

o tal vez necesites una ciruela

git remote prune public

ciruela pasa

Elimina todas las ramas de seguimiento antiguas en <nombre>. Estas ramas obsoletas ya se han eliminado del repositorio remoto al que hace referencia <nombre>, pero todavía están disponibles localmente en "remotes / <nombre>".

Con la opción --dry-run, informa qué ramas se podarán, pero en realidad no las podas.

Sin embargo, parece que estos deberían haberse limpiado antes con

git remote rm public 

rm

Elimine el control remoto llamado <nombre>. Todas las sucursales de seguimiento remoto y configuración de configuración para el control remoto              son removidos.

Así que puede ser que haya editado manualmente su archivo de configuración y esto no ocurrió, o tiene problemas de privilegio.

Tal vez correr de nuevo y ver qué pasa.

Contexto de asesoramiento

Si echas un vistazo en el registros de revisión, notarás que sugerí más técnicas "correctas", que por alguna razón no querían trabajar en su repositorio.

Sospeché que OP había hecho algo que dejó su árbol en un estado inconsistente que hizo que se comportara de una manera extraña, y git gc fue necesario para reparar el crumble dejado atrás.

Generalmente  git branch -rd origin/badbranch es suficiente para activar una sucursal de seguimiento local, o git push origin :badbranch para activar una rama remota, y generalmente Vas a Nunca necesita llamar git gc


664
2017-07-02 02:42



Todo lo que necesitas hacer es

git fetch -p

Eliminará todas las sucursales locales que se eliminen de forma remota.

Si tienes Git 1.8.5 o superior, puedes configurarlo automáticamente

git config fetch.prune true

o

git config --global fetch.prune true

627
2017-11-24 10:38



git push public :master

Esto eliminaría la rama remota llamada master como Kent Fredric ha señalado.

Para enumerar las ramas de seguimiento remoto:

git branch -r

Para eliminar una rama de seguimiento remoto:

git branch -rd public/master

308
2017-07-02 02:47



Todo lo que necesitas hacer es

$ git branch -rd origin/whatever 

Es así de simple. No hay ninguna razón para llamar a un gc aquí.


152
2017-07-07 20:59



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


69
2018-06-08 18:18



La respuesta aceptada no funcionó para mí cuando el árbitro estaba empacado. Esto sin embargo:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public

28
2018-01-12 04:21



En mi caso, estaba tratando de eliminar las entradas que se guardaron en .git/packed-refs. Puede editar este archivo de texto plano 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


7
2017-12-01 23:47