recuperar git cambios indexados perdidos

Mi twig git probablemente estaba en mal estado (rebase incompleto tal vez) y no sabía. Hice algunos cambios y luego quise comprometerme pero git se quejó de que estás en un estado escogido, por lo que no puede comprometerse. Busqué en Google y descubrí que si hago un reset --hard a una twig remota, me sacaría del mal estado de idiota. Antes de hacer eso, agregué mis cambios en el área de preparación (usando git add). Pero cuando lo hice git reset --hard , mi área de preparación se ha ido. No puedo encontrar mis files de índice y cambios. ¿Hay alguna manera de resucitar el índice?

Cuando git add un file, agregará ese file a la database de objects y colocará la información del object en el área de preparación. Si va a eliminar posteriormente ese file del área de ensayo, solo se elimina del índice. El file permanecerá en la database de objects hasta que sea basura recolectada. Puede encontrar estos files "colgantes" usando git fsck .

Por ejemplo:

Si creo un file nuevo y lo git add a mi área de ensayo:

 % echo "new file" > newfile.txt % git add newfile.txt % git ls-files --stage 100644 40ee2647744341be918c15f1d0c5e85de4ddc5ed 0 file.txt 100644 3748764a2c3a132adff709b1a6cd75499c11b966 0 newfile.txt 

Y luego restablecer a HEAD , observe que newfile.txt desaparece:

 % git reset --hard HEAD % git ls-files --stage 100644 40ee2647744341be918c15f1d0c5e85de4ddc5ed 0 file.txt 

Sin embargo, ejecutar git fsck me mostrará objects que no están enraizados en mi gráfico, que están "colgando", ya sea porque hay commits que no son parte de una twig (tal vez los reescribí) y los objects a los que hacen reference, o porque git add Agregó un file y no lo cometió. Mi newfile.txt estará entre los siguientes:

 % git fsck Checking object directories: 100% (256/256), done. dangling blob 3748764a2c3a132adff709b1a6cd75499c11b966 

Lamentablemente, su nombre de file no está almacenado en la database de objects (ya que los contenidos idénticos tendrían el mismo object independientemente del nombre), por lo que si tiene muchos blobs colgantes, tendrá que examinar cada uno:

 % git show 3748764 new file 

Una vez que determino qué burbuja colgante es la que quiero recuperar, puedo volver a colocarla en el sistema de files networkingirigiendo la git show :

 % git show 3748764 > newfile.txt 

¡Y el file está recuperado!