git recover branch eliminada en la carpeta remota y local eliminada

Perdí algo de trabajo e bash recuperarlo. Básicamente creé una twig localmente, comprometida, presionada, y luego hice un poco de limpieza y eliminé la twig localmente, de forma remota y el directory que contenía el proyecto localmente (pensé que siempre podría clonarlo en cualquier momento posterior). No sé por qué olvidé fusionarme con "dev".

Revisé mi historial de bash para ver qué podría haber pasado, y creo que pude averiguar qué commands se ejecutaron (ver más abajo).

He estado buscando respuestas sobre esto, encontré montones de ellos pero ninguno funcionó (incluso el prometedor fsck / reflog)

Básicamente, esto es lo que parece haber sucedido (hace 2 semanas):

git clone ssh://.../myproject cd myproject git checkout dev vim hello git commit -m "new commit" git push origin dev git checkout -b newbranch vim blabla git add blabla git commit -m "new commit" git push git checkout dev git push origin --delete newbranch git branch -d newbranch cd .. rm -rf myproject 

El inglés no es mi lengua materna, puedo aclarar cualquier punto / editar mi pregunta si es necesario. Gracias de antemano por ayudarme a encontrar una solución que no sea saltar por la window

Fondo

Cuando elimina una twig ( git branch -d ... ), elimina el nombre de la twig (el puntero al compromiso de la punta) y los reflogs de la twig. Sin embargo, los commits se mantienen por un time, normalmente unos tres meses, antes de ser recogidos basura, ya que todavía están referencedos por uno de los reflogs, el de HEAD .

Por lo tanto, normalmente ejecutaría git log -g (o usaría un visor gráfico que le permite ver los reflogs HEAD ) y searchía el último commit que hizo en newbranch . Por ejemplo, puede ver algo como esto:

 commit e1189656a60f446de5b40137e8149f4bf5635986 Reflog: [email protected]{66} (You <[email protected]>) Reflog message: commit: Frobble the minifier ... 

Si esa es la confirmación correcta, entonces:

 git branch newbranch e1189656a60f446de5b40137e8149f4bf5635986 

volverá a poner la label de la twig.

Por qué eso no es bueno aquí

Citas los dos últimos commands anteriores como:

 cd .. rm -rf myproject 

Esto eliminaría todo el clon, incluido myproject/.git donde git mantuvo los objects repo y los reflogs.

Entonces, ¿qué opciones quedan?

Quizás haya una copy de security que se haya realizado en algún momento mientras existía el directory myproject . Las copys de security locales de su clon local podrían tener la mayoría o la totalidad de lo que desea recuperar.

Si no, bueno, hiciste esto:

 git clone ssh://.../myproject ... git push 

Demos a esta máquina (el objective del ssh:// ) un nombre, O para el origen.

Si todo fue bien, la inserción copió las confirmaciones y sus treees y files en O y estableció una label de twig newbranch en O , apuntando a la newbranch de newbranch máxima. La push --delete eliminó la label de la twig. Desafortunadamente … bueno:

Digamos que puede iniciar session en O y myproject en el repository myproject git allí. Puede tratar de search en sus reflogs (suponiendo que tengan alguno). Desgraciadamente, git push --delete habría eliminado el reflog para la twig newbranch , que es el único lugar donde es probable que se grabe el push.

A continuación, puedes probar ejecutar git fsck allí y search "commit colgando". De acuerdo con los comentarios anteriores, ya hiciste esto y no obtuviste nada, lo que implica que git ya hizo un pase de recolección de basura y eliminó los objects de confirmación y, por lo tanto, todo lo demás que estás buscando.

La comida para llevar

(1) Las copys de security son buenas. Verifique las copys de security.

(2) No rm -rf sus repositorys git, si puede evitarlo.