Al azar golpeé esto hoy mientras trataba de ejecutar Git Garbage Collect :
$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack
¿Cómo trato con esto?
git
git-remote
git-fetch
git-gc
Ryan
fuente
fuente

masterotra llamadadevelop. Días antes de cambiarlo de nuevodevelopamastery eliminé la antigua rama predeterminadadevelop, pero en mi directorio de trabajo, el archivo.git/refs/remotes/origin/HEADtodavía apuntaba a lorefs/remotes/origin/developque ya no existe. En esta situación, eliminar el archivo funcionó.git prunefuncionó para mí, una forma de eliminar datos que se han acumulado en Git pero que no están siendo referenciados por nada útil.$ mv .git/refs/remotes/origin/HEAD /tmp$ git gcgit prunegit gcfuncionó para míEl problema con el que me encontré (que es el mismo problema que @Stavarengo mencionó en este comentario anterior) es que la rama remota predeterminada (
developen mi caso) se había eliminado, pero aún se hacía referencia en.git/refs/remotes/origin/HEAD.La apertura
.git/refs/remotes/origin/HEADen mi editor mostró esto:Lo edité cuidadosamente para señalar mi nueva rama predeterminada y todo estaba bien:
La pista que me avisó fue que la ejecución
git prunemostró este error:fuente
Después de ver la respuesta de Trenton, miré
.git/refs/remotes/origin/HEADy vi que también apuntaba a una rama vieja que ahora está borrada.Pero en lugar de editar el archivo yo mismo, probé la solución de Ryan:
Estableció automáticamente el archivo en la nueva rama y
git gcfuncionó bien después de eso.fuente
git remote set-head $REMOTE --autoen mi caso, $ REMOTE es el alias remoto, no el "origen" predeterminado, porque tengo múltiples configuraciones remotas.Pensé que la solución era la siguiente, ya que parecía funcionar, pero resulta que en realidad no resuelve el problema.
fuente
git prune(como se recomendó en el primer resultado del comando), por lo que no puedo decir exactamente qué me ayudó: primero, segundo o ambos.git remote set-head origin --autoreparó mis archivos de referencia / control remoto / origen / HEAD sin que tuviera que usarlogit pruneerror: Multiple remote HEAD branches. Please choose one explicitlyy tuve que usargit remote set-head origin mybranch(mientras la rama 'mybranch' estaba finalizada la compra) para que el error desapareciera.Parece que sus referencias simbólicas pueden estar rotas ... Intente reemplazarlo con su rama predeterminada de esta manera: Por ejemplo, mi rama predeterminada es master
Eso debería arreglarlo.
fuente
Si está utilizando git worktrees, asegúrese de estar haciendo un
antes de correr
Tuve un árbol de trabajo dañado y esto pareció funcionar después de eliminar el árbol de trabajo dañado.
git prunepor sí solo no parecía funcionar.fuente
La causa de esto para mí fue trabajar en una carpeta comprimida en Windows. Cuando la carpeta se descomprimía, corrompía los archivos del paquete, lo que generaba otros problemas extraños, como no ser capaz de eliminar ramas inexistentes.
La única solución era borrar el directorio de trabajo y clonar los remotos remotos nuevamente. Afortunadamente, todavía podía empujar y extraer actualizaciones para asegurar que no se perdiera nada. Todo está bien ahora.
fuente