Abro mi repositorio de Git usando gitExtensions en Windows 7 para un proyecto de Visual Studio. De repente está vacío. El repositorio existe, pero todos mis commits 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: mala revisión predeterminada 'HEAD'
Actualización
Después de mirar /programming/1545407/recovering-broken-git-repository probé
git fsck
volvió:
error: HEAD no válido
fatal: objeto suelto 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (almacenado en .git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) está dañado
Compromiso de devoluciones:
error: no se puede resolver la referencia HEAD: No existe tal archivo o directorio
fatal: no se puede bloquear la referencia HEAD
y registrando devoluciones de rama maestra
Advertencia de $ git log master: ignorando las referencias de referencia / cabezas / master rotas. advertencia: ignorando las referencias de referencia / cabezas / master rotas. fatal: argumento ambiguo 'maestro': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones
Seguiré pegando cosas que podrían ser relevantes
Advertencia de $ git reflog master
: ignorando las referencias de referencia / cabezas / master rotas.
advertencia: ignorando las referencias de referencia / cabezas / master rotas.
fatal: argumento ambiguo 'maestro': revisión desconocida o ruta no en el árbol de trabajo.
Use '-' para separar las rutas de las revisiones
Más información posiblemente útil: cada vez que borro el archivo corrupto, otro ocupa su lugar. Estoy empezando a pensar que tiene algo que ver con la rama maestra que señala la cosa incorrecta o algo. porque supongo que la cabeza está apuntando al maestro.
Un día después:
así que puse a mi compañero en esto, pudo revisar los registros y dijo que los hash en los registros no coinciden con los objetos en la carpeta. Intentó restablecer la rama maestra a los registros o algo así, me perdí un poco. Espero que sea útil
Respuestas:
Qué quieres decir exactamente? ¿El árbol de trabajo sigue ahí? ¿Existe
.git/
? ¿Hay algún archivo en él?Los mensajes que publicó sugieren que el archivo
.git/HEAD
no existe. Define el estado esperado del árbol de trabajo (lo que había extraído). Si ese archivo se ha ido, git no sabe dónde estabas.Puede intentar crear el archivo usted mismo, con este contenido:
ref: refs/heads/master
Si estaba en una rama diferente, simplemente reemplace "maestro" con el nombre de la rama. Si no estuvieras en una rama, sería más complicado.
.git/logs/HEAD
registra 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 en frente se refieren a commits. Debería poder encontrarlos en el registro de la rama, por ejemplo
.git/logs/refs/heads/master
.Parece que también falta la salida de git reflog que proporcionó
refs/heads/master
. Se supone que su único contenido es el SHA1 de la última confirmación (y una nueva línea). Puede encontrar el último SHA1 al final del registro de sucursal, por ejemplo.git/logs/refs/heads/master
.fuente
Si existe .git / HEAD y su contenido se
ref: refs/heads/master
verifica en el archivo refs / heads / master, debe contener el sha1 del último commit.Si ese archivo estaba dañado y estaba lleno de caracteres NULL Edite ese archivo y coloque el sha1 del último commit
.git/logs/HEAD
o el anterior al último commit.Entonces hazlo
git reset --hard 'sha1 of the commit that you selected'
fuente
Parece que su repositorio ha sido dañado. Lo más fácil sería recuperar su repositorio de una copia de seguridad o volver a clonar el repositorio de la fuente original (suponiendo que no tuviera toneladas de trabajo en el repositorio).
Si la opción de reiniciar / clonar no es una opción, recomendaría leer Pro Git (libro en línea gratuito o la versión en papel ) Todo el libro es muy informativo, pero especialmente eche un vistazo al último capítulo para comprender cómo funciona Git internamente. Una vez que comprenda cómo funciona Git, eche un vistazo a las instrucciones de Linus sobre la recuperación de objetos corruptos .
fuente
Después de navegar por la web por un tiempo, finalmente encontré esto y funcionó.
fuente
origin
(con suerte no demasiado trabajo realizado localmente), y luego obliga a lamaster
sucursal local a estar de acuerdo con el control remoto. ¡Cuidado,--reset
significa descartar cualquier cambio local! Además, si no estuviera demasiado roto, simplementegit reset origin/master
habría restaurado el último estado conocido (registrado) de lamaster
rama.