¿Cómo arreglar git missing blob?

Debido a que he estado sincronizando mi repository git entre varios lugares, ahora estoy atrapado con un repository de git roto. Cuando hago el git log obtengo un historial correcto, pero cuando hago el git status consigo

 fatal: unable to read 563e4c9abcd4114e08255db989f0f53426bdeff7 

Entonces, después de search un poco, probé git fsck :

 Checking object directories: 100% (256/256), done. missing blob 33244941016301570dccdcdc95e543910109d0a8 dangling blob 59f44441e6437ebc4d40182eb8a10d3e07fe367b missing blob 5dc8ab1804acb58fc658bcd6152fbb246290c8ae dangling blob 698c775f2599fad3d09906dead4dc67743a984bd dangling blob 922003b8433bcad6ce9778a37628d738faa26389 dangling blob c33c0528bfee55b04d99de4580da49de4413329b dangling blob e5107c118bde0edbe5dfb994cb6a50d235c3f06b dangling blob 437573e539572454cb868ca5a0f5074b96d777ac missing blob 468d1856336eaa1ce8006f38ce779c0d997c8d48 dangling blob 6fc9c88708d7d5ca455e68781472bdea119997eb dangling blob 7225d0147fa566369ba3024324b527a7adeac094 dangling blob bb8125d15579fcf37925f09cd1883b15272f9f0d missing blob c8095f49253ac3787a6f86943160eda2c78a6a28 dangling blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 dangling blob 0bdaed084e15add987ef86fe84f435d085475995 dangling blob 36ee13c9b334da090ea6b194606df8a2852b3b3a missing blob 563e4c9abcd4114e08255db989f0f53426bdeff7 <= the one which results in the fatal error. dangling blob 84f2f2a9d1d051e6418a787ca90e75446f712866 dangling blob c636d85269838efecbb496eda5a8cfd8ec753d69 dangling blob cb7a8494bfc86e894c0c6e268308ddc1dd6d713c dangling blob d166fff9e1c85ab9f0f4f620119181c5f76c2a53 dangling blob d3b6f194df857412481a318d4275faeb6689e4a0 missing blob db9a6744bc0df03cf685296695bea6324f23e0ac dangling blob def6a6a18457989c7d18825c7c1bbfeefc8b261d and about 20 more.. 

Y desde aquí estoy un poco perdido. Leí algo sobre ejecutar git reflog expire --expire=now --all , pero eso no hace nada por mí.

Todos los files en mi repository aún están presentes y están respaldados de forma segura, así que no hay problema. Sin embargo, me gustaría recuperar mi historial de repo. ¿Alguien sabe qué pasos puedo tomar desde este punto?

¡Todos los consejos son bienvenidos!

Obtuve una "mancha perdida" después de intentar reparar el error "el file de object está vacío" (en realidad terminé con el file de object .git/objects/f7/880aa1d1a76bfff73f3d602e15b4bc829d6a07 eliminado del sistema de files).

Para resolver el problema, seguí estos pasos:

  1. Utilice el script bash que se encuentra aquí para detectar una confirmación que contenga este blob perdido. Colóquelo en el directory raíz del repository con el nombre de find.sh :

     #!/bin/sh obj_name="$1" shift git log "$@" --pretty=format:'%T %h %s' \ | while read tree commit subject ; do if git ls-tree -r $tree | grep -q "$obj_name" ; then echo $commit "$subject" fi done 

    Y luego ejecutarlo pasando sha1 de blob faltante como argumento:

     $ ./find.sh f7880aa1d1a76bfff73f3d602e15b4bc829d6a07 629afc4 ESLint warning in layers' configuration file is fixed. 

    629afc4 es parte del sha1 de commit (fue un último commit que traté de enviar al repository remoto).

  2. Encuentre un file asociado con este blob:

     $ git ls-tree -r 629afc4 | grep f7880aa1d1a76bfff73f3d602e15b4bc829d6a07 100644 blob f7880aa1d1a76bfff73f3d602e15b4bc829d6a07 src/config/layers.js 

    Es src/config/layers.js en mi caso.

  3. Compruebe si el hash del file coincide con el hash en el tree de git:

     $ git hash-object src/config/layers.js f7880aa1d1a76bfff73f3d602e15b4bc829d6a07 
  4. Si es así, podemos escribir el contenido del file en el blob:

     $ git hash-object -w src/config/layers.js 

Hacer estos pasos me ayudó a eliminar el error y arreglar un repository local roto. La solución se encuentra en este artículo .

Sé que esta es una pregunta bastante antigua, pero ahora tenía el mismo problema y ninguna de las otras respuestas de SO me funcionó, ni tampoco la respuesta que proporcioné aquí.

Al leer tu pregunta, tengo una idea de tu primera frase:

Debido a que he estado sincronizando mi repository git entre varios lugares, ahora estoy atrapado con un repository de git roto.

Estoy haciendo lo mismo con una memory USB para sincronizar. De esta forma puedo simplemente git pull <path/to/usb/repo> master en mi directory de trabajo en cualquiera de mis dispositivos para extraerlo de la memory USB, y "presionar" en la memory USB. Cambio el directory al repository USB stick y uso git pull <path/to/working/directory> master . Funcionó bien varias veces hasta hoy. Mientras hago git pull <path/to/usb/repo> master en uno de mis directorys de trabajo, tengo

 errror: git upload-pack: git-pack-objects died with error. fatal: git upload-pack: aborting due emote: fatal: unable to read 8f6d079cdb5243f5a2d1000e31967f4c361b7966 remote: aborting due to possible repository corruption on the remote side. 

Al hacer git fsck en mi repository USB, me missing blob ...... (lo siento, no copié eso, pero solo me faltaron 2 blobs). En general, mi problema era muy similar al tuyo. Y leyendo el tuyo tengo la siguiente idea:

TL; DR: Al final hice el scan and fix Windows scan and fix como se muestra aquí , que en realidad aparece cada vez que conecto cualquiera de mis memorys USB y nunca hice nada que encontré útil, hasta ahora. En realidad arregló todo el problema.