se agregaron nuevos files durante git interactive rebase, aborted rebase, faltaban nuevos files

Hice un git rebase -i en un commit varios nodos antes. Agregué algunos files nuevos que quería agregar a esa confirmación.

Parecía que estaba en el nodo equivocado, así que de inmediato hice un git rebase –aborto. Esos nuevos files ahora han desaparecido por completo. En los reflogs, parece que se emitió un command de eliminación (modo de file eliminado 100644), pero ni siquiera el nombre del file está presente.

Esto no se ve bien, pero pensé que podría preguntar: ¿es esto recuperable?

No, los cambios no fueron "recuperables" en el sentido de que podrían ser tomados por un solo command. Sí, los cambios se encontraron en un gs fsck, junto con más de 100 cambios antiguos que tuve que revisar. Ick, pero mejor que la pérdida total.

Cosas importantes a tener en count: – Tan pronto como hagas un "git add", ese nodo de confirmación se graba, las cosas no pueden perderse por completo desde ese punto. Un "aborto de rebase de git" no es como revertir una transacción, es más como un "git reset –hard" que borrará cualquier file nuevo que se haya agregado durante esa rebase. Git no realiza un seguimiento de los cambios que realizó durante su rebase, por lo que no puede "deshacerlos" ni deshacerlos. Durante la rebase, estás en tierra de nadie, y abortar la rebase es un reinicio de git a un nodo de confirmación previo.

Para volver a resumir el problema, hice un puñado de cambios y los estaba organizando en commits separados, 1 function por commit. A mitad de path, me di count de que había omitido algunos files en una confirmación anterior (no realizada). Hice un alijo de git, comencé una database interactiva, hice un pop de git pop, agregué los files perdidos a una confirmación previa, y me di count de que había agregado los nuevos files al nodo de confirmación incorrecto. Luego, hice un git rebase –abort, que borraba esos nuevos files, y era generalmente horrible.

TLDR: no agregue nuevos files durante una rebase interactiva sin hacer primero una copy de security; si cancela la rebase, sus files se perderán (la mayoría) y no se recuperarán fácilmente.

Dado que los files nunca se agregaron al DAG, no parece que sea recuperable a less que tenga una segunda copy de ellos en alguna parte. Sin embargo, si los agregaste al índice, podrás encontrarlos, como @jefromi sugiere, git fsck --lost-found .

Más información:

Ver el reflog le mostrará hacia dónde apuntaba su sucursal. Desea usar git log para el historial real. Agregue la opción --stat para ver los cambios de file en cada confirmación.