Rama maestra corrupta de Git

Rama maestra corrupta de Git

Abro mi repositorio Git usando gitExtensions en Windows 7 para un proyecto de Visual Studio. De repente está vacío. El repositorio existe, pero todas mis confirmaciones han desaparecido.

Estoy usando la interfaz gráfica y creo que es la primera vez que la abro desde que la actualizaron.

No estoy seguro de qué hacer para recuperar mis confirmaciones.

cuando escribo

git log 

Recibo

fatal: revisión predeterminada incorrecta 'HEAD'

Actualizar
Después de mirarhttps://stackoverflow.com/questions/1545407/recovering-broken-git-repositoryLo intenté

gitfsck

volvió:

error: HEAD
fatal no válido: el objeto suelto 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (almacenado en .git/obj ects/36/b7d9e1ca496bcb864c0b9c8671fcec97fbda31) está dañado

Comprometer devoluciones:

error: no se puede resolver la referencia HEAD: no existe tal archivo o directorio
fatal: no se puede bloquear la referencia HEAD

y registrar devoluciones de la rama maestra

Advertencia de $ git log master: ignorando referencias rotas/heads/master. Advertencia: ignorar referencias rotas/cabezas/maestro. fatal: argumento ambiguo 'maestro': revisión desconocida o ruta que no está en el árbol de trabajo. Utilice '--' para separar rutas de revisiones

Seguiré pegando cosas que puedan ser relevantes.

Advertencia de $ git reflog master
: ignorar refs/heads/master de referencia rotos.
Advertencia: ignorar las referencias rotas/cabezas/maestro.
fatal: argumento ambiguo 'maestro': revisión desconocida o ruta que no está en el árbol de trabajo.
Utilice '--' para separar rutas de revisiones

Más información posiblemente útil: cada vez que elimino el archivo corrupto, otro ocupa su lugar. Estoy empezando a pensar que tiene algo que ver con que la rama master apunta a algo incorrecto o algo así. porque supongo que la cabeza apunta al maestro.

Un día después:
le conté a mi amigo esto, pudo revisar los registros y dijo que los hashes en los registros no coinciden con los objetos en la carpeta. Intentó restablecer la rama maestra en los registros o algo así, me perdí un poco. Espero que sea útil

Respuesta1

El repositorio existe, pero todas mis confirmaciones han desaparecido.

Qué quieres decir exactamente? ¿Sigue ahí el árbol de trabajo? ¿ .git/Existe? ¿Hay algún archivo en él?

Los mensajes que publicó sugieren que el archivo .git/HEADno existe. Define el estado esperado del árbol de trabajo (lo que habías retirado). Si ese archivo desapareció, git no sabe dónde estabas.

Podrías intentar crear el archivo tú mismo, con este contenido: ref: refs/heads/master

Si estaba en una sucursal diferente, simplemente reemplace "master" con el nombre de la sucursal. Si no estuvieras en una sucursal, sería más complicado.

.git/logs/HEADregistra estados pasados ​​de HEAD, con líneas posteriores en la parte inferior. Esta línea de ejemplo muestra un pago: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <[email protected]> 1346938344 +0200 checkout: moving from master to MySuperBranch

Los SHA1 al frente se refieren a confirmaciones. Debería poder encontrarlos en el registro de la sucursal, por ejemplo .git/logs/refs/heads/master.

refs/heads/masterParece que también falta la salida de git reflog que proporcionaste . Se supone que su único contenido es el SHA1 de la última confirmación (y una nueva línea). Puede encontrar el SHA1 más reciente al final del registro de sucursal, por ejemplo .git/logs/refs/heads/master.

Respuesta2

Si .git/HEAD existe y su contenido se ref: refs/heads/masterverifica, el archivo refs/heads/master debe contener el sha1 de la última confirmación.

Si ese archivo estaba dañado y lleno de caracteres NULL, edite ese archivo y coloque el sha1 de la última confirmación .git/logs/HEADo la anterior a la última confirmación.

Entonces hazlogit reset --hard 'sha1 of the commit that you selected'

Respuesta3

Parece que tu repositorio se ha dañado. Lo más fácil sería recuperar su repositorio a partir de una copia de seguridad o volver a clonar el repositorio desde la fuente original (suponiendo que no tuviera mucho trabajo en el repositorio).

Si restaurar/clonar no es una opción, recomendaría leer detenidamenteGit profesional(libro en línea gratuito o elversión en papel). Todo el libro es muy informativo, pero eche un vistazo especialmente al último capítulo para comprender cómo funciona Git internamente. Una vez que comprenda cómo funciona Git, eche un vistazo a Linus.instrucciones sobre cómo recuperar objetos corruptos.

Respuesta4

Después de navegar un rato por la web, finalmente encontré esto y funcionó.

git fetch origin
git reset --hard origin/master

información relacionada