¿Cómo restaurar files borrados con "git rm *"?

Accidentalmente eliminé todos los files después del 1er compromiso en el repository local utilizando git rm * .

Git commit

 git commit -m 'IF ELSE' [master fc9895a] IF ELSE 14 files changed, 3234 insertions(+) create mode 100644 Lecture 03 - Bootstrapping.ppt create mode 100644 Makefile create mode 100644 codegenerator.cpp create mode 100644 error.cpp create mode 100644 error.h create mode 100644 includelex.h create mode 100644 includeyacc.h create mode 100644 lexrule.l create mode 100644 rule.tab.c create mode 100644 stable.h create mode 100644 symboletable.cpp create mode 100644 test.c create mode 100644 yaccrule.y create mode 100644 yaccrule2.y git rm * rm 'Lecture 03 - Bootstrapping.ppt' rm 'Makefile' rm 'README.md' rm 'codegenerator.cpp' rm 'error.cpp' rm 'error.h' rm 'includelex.h' rm 'includeyacc.h' rm 'lexrule.l' rm 'rule.tab.c' rm 'stable.h' rm 'symboletable.cpp' rm 'test.c' rm 'yaccrule.y' 

Secuencia de commands que utilicé para restaurar

 git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: Lecture 03 - Bootstrapping.ppt deleted: Makefile deleted: README.md deleted: codegenerator.cpp deleted: error.cpp deleted: error.h deleted: includelex.h deleted: includeyacc.h deleted: lexrule.l deleted: rule.tab.c deleted: stable.h deleted: symboletable.cpp deleted: test.c deleted: yaccrule.y deleted: yaccrule2.y Untracked files: (use "git add <file>..." to include in what will be committed) .hg/ 

 git reset --hard HEAD^1 HEAD is now at 9b72b0c first commit 

 git reset --hard HEAD HEAD is now at 9b72b0c first commit 

  git checkout Your branch is up-to-date with 'origin/master'. 

  git reset HEAD test.c git reset HEAD Makefile git reset HEAD -- Makefile git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) .hg/ 

No puedo restaurar el file en Ubuntu 14.10, git versión 2.1.0. ¿Hay alguna manera de restaurar el file?

trabajo de detective

Según su descripción del problema, antes de tener problemas, el historial de su repository debe consistir en dos compromisos:

 9b72b0c first commit fc9895a IF ELSE (HEAD, master) 

Evidencia

  • La información sobre su segundo compromiso está en el resultado de

     git commit -m 'IF ELSE' 
  • El resultado de

     git reset --hard HEAD^1 

    (este command restablece la twig actual al padre de la confirmación actual) indica que el padre de fc9895a tiene SHA 9b72b0c y el post first commit .

Restablezca su twig al estado deseado

Como no ha realizado ningún cambio local después de ejecutar git rm * , todo lo que tiene que hacer es volver al estado en el que se encontraba su repository justo después de que haya confirmado IF ELSE .

Afortunadamente, todavía tienes un logging del SHA corto de esa confirmación: fc9895a . Por lo tanto,

 git reset --hard fc9895a 

es el command que te sacará de problemas.

Explicación

git-reset se usa para restablecer la twig actual ( master , aquí) al estado especificado ( fc9895a , aquí).

Y la página man de git-reset describe la bandera --hard tanto:

--hard

Restablece el índice y el tree de trabajo. Cualquier cambio en los files rastreados en el tree de trabajo desde <commit> se descarta.

(¡Use con precaución!)

Aquí hay una buena introducción a cómo funciona el git-reset .