Error fatal después de la fusión automática de GitHub

Tengo un repository en GitHub ubicado aquí . Creé una twig de trabajo para alguien y ellos bifurcaron el repository, hicieron algunos cambios en la twig de trabajo y enviaron una request de extracción.

Probé los cambios y todo estaba bien, y como GitHub estaba ofreciendo fusionar automáticamente la request de extracción, seguí adelante y pulsé el button verde "Merge Pull Request". Todo estuvo bien, excepto que los cambios en la twig de trabajo se aplicaron a la twig principal con la que puedo vivir.

El problema ahora es que el repository no puede ser recuperado por mí ni por nadie más. Me sale este error:

dp@dpub:/tmp/gh$ git clone git://github.com/dapphp/securimage.git Initialized empty Git repository in /tmp/gh/securimage/.git/ remote: Counting objects: 333, done. remote: Compressing objects: 100% (269/269), done. remote: Total 333 (delta 91), reused 297 (delta 55) Receiving objects: 100% (333/333), 3.91 MiB | 2.78 MiB/s, done. Resolving deltas: 100% (91/91), done. error: refs/remotes/origin/master does not point to a valid object! error: Trying to write ref refs/heads/master with nonexistant object 31d684d383913c4cf1a0d5ff0691c2c163284a35 fatal: Cannot update the ref 'HEAD'. 

Esto da como resultado que no se cree ningún directory ni que se descarguen los files de trabajo. He buscado todas las forms posibles de resolver esto, pero la mayoría habla de emitir commands al repository git que no puedo hacer porque no puedo get una copy del repository en primer lugar.

Descubrí que aún puedo clonar una twig remota usando algo como esto: git clone -b audiofixes git://github.com/dapphp/securimage.git pero sigo teniendo un error sobre la reference incorrecta y no puedo entender cualquier command que pueda ejecutar para solucionar el problema. Estoy dispuesto a deshacer los cambios si es necesario.

En caso de que ayude, una vez que clono una twig diferente, aquí está la salida de git branch -a :

 * audiofixes remotes/origin/2.0.2 remotes/origin/3.0 remotes/origin/HEAD -> origin/master remotes/origin/audiofixes remotes/origin/securimage_flash 

En este punto, realmente no tengo idea de qué puedo hacer (si es que algo) para arreglar el estado del repository.

Gracias por cualquier sugerencia.

EDITAR: Algunos commands dan como resultado.

 $ ls .git/refs/remotes/origin HEAD $ ls .git/objects info/ pack/ # info is empty, pack has pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.idx and pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.pack $ cat .git/refs/remotes/origin/master cat: .git/refs/remotes/origin/master: No such file or directory $ cat .git/refs/remotes/origin/HEAD ref: refs/remotes/origin/master 

NUEVO:

Aparentemente 1) github no le da acceso a ssh :(, y 2) es imposible compartir reflogs entre diferentes máquinas a través del protocolo git.

Entonces … Ya creaste un ticket aparentemente, pero no necesariamente los necesitas para arreglar el repository. Todo lo que necesita es que ellos (dado que tengan acceso privilegiado) ejecuten git reflog master en el repository del server y luego pegue los resultados para que los vea. En ese file, busque el valor SHA-1 anterior del maestro (ya que el actual no parece funcionar). Una vez que tenga eso, usted (creo) puede hacer lo siguiente (en su propia computadora):

 $ git checkout -b temp $ git update-ref refs/heads/temp $SHA1 $ git push -u origin +temp:master 

Esto deshará la operación de combinación en el server.

Es posible que pueda get el SHA1 previamente trabajado sin tener que get el reflog desde el server. En su repository local (o el repository local de su amigo), el compromiso que trabajó previamente existe en algún lugar allí. Si puede encontrar una manera de encontrarlo allí, puede continuar con la sugerencia anterior.

VIEJO: Aquí está mi primer pensamiento. Si puede copyr el directory .git/logs desde el server , entonces habrá almacenado en él todos los valores anteriores de la twig master . Específicamente, el file .git/logs/refs/heads/master será un file de text sin procesar con los valores previos de esa twig. Por ejemplo (no sé si github te permite hacer esto o no):

 $ git clone https://github.com/dapphp/securimage.git -b audiofixes $ scp github.com:/dapphp/securimage.git/logs/refs/heads/master .git/logs/refs/remotes/origin/master $ git update-ref refs/remotes/origin/master refs/remotes/origin/master@{1} #see "Date Spec" section of http://book.git-scm.com/4_git_treeishes.html 

eso teóricamente debería cambiar el valor de lo que era el maestro anteriormente. Sin embargo, solo lo hará de forma local y no cambiará realmente el valor en el server, que es lo que realmente necesitamos. Entonces, si pudieras enviar ssh directamente al server y simplemente ejecutar ese último command allí, eso (de nuevo, teóricamente) solucionaría el problema simplemente deshaciendo la combinación.

.

Esto es todo lo que puedo pensar encima de mi cabeza. Pero realmente me gusta resolver acertijos como este, así que dejaré que se quede en mi cabeza un poco más 🙂