697 votes

Récupérer de git reset --hard?

Est-il possible de récupérer les modifications non validées dans le répertoire de travail à partir de git reset --hard HEAD ?

789voto

ken Points 489

réponse de cette SO

 $ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}    
203e84e HEAD@{1}: reset: moving to HEAD@{1}    
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug

# said the commit to be recovered back is on 9300f9d
$ git reset HEAD@{7}
 

Vous avez votre journée de retour! :)

630voto

sehe Points 123151

En règle générale, vous ne pouvez pas récupérer les modifications non validées. La vraie solution serait donc: regardez votre sauvegarde. Peut-être que votre éditeur / IDE stocke les copies temporaires sous / tmp ou C: \ TEMP et ainsi de suite. [1]

 git reset HEAD@{1}
 

Cela restaurera la HEAD précédente

[1] vim, par exemple, stocke éventuellement une annulation persistante, eclipse IDE enregistre l’historique local ; de telles fonctionnalités pourraient vous faire économiser un **

370voto

Echostar Points 789

J'ai accidentellement couru git reset --hard sur mon repo aujourd'hui trop tout en ayant les modifications non validées trop aujourd'hui. Pour la récupérer, j'ai couru git fsck --lost-found, qui a écrit à tous les non référencées blobs <path to repo>/.git/lost-found/. Étant donné que les fichiers n'ont pas été validées, je l'ai trouvé dans l' other répertoire au sein de l' <path to repo>/.git/lost-found/. À partir de là, je peux voir le non validées fichiers, la copie de gouttes, et de les renommer.

Remarque: Cela ne fonctionne que si vous avez ajouté les fichiers que vous souhaitez enregistrer sur l'index (à l'aide d' git add .). Si les fichiers n'étaient pas dans l'index, ils sont perdus.

49voto

user1147827 Points 41

Je viens de faire git reset --hard et j'ai perdu toutes mes modifications non validées. Heureusement, j'utilise un éditeur (IntelliJ) et j'ai pu récupérer les modifications à partir de l'historique local. Eclipse devrait vous permettre de faire la même chose.

11voto

mk.. Points 2087

L'information est perdue. Il n'y a plus d'une façon de sortir de cette si vous juste avez - git diff récemment.

Si vous arrivé à faire git diff récemment(complet git diff), faites défiler votre éditeur de texte(vim dans mon cas) et de regarder pour l'o/p de git diff. Enregistrer les op dans un fichier et de le patcher avec patch -p1 < diff.patch

Bien sûr, vous devez être très prudent tout en faisant cela. lorsque vous copiez le git diff dans un fichier, tous les onglets à l'origine, le code source sera copié comme des espaces(pour moi c'était le cas) Donc j'ai changé tous les "8 espaces", "\t" puis "7 places" "\t"(7 espaces doivent être faites parce que dans git diff, la ligne qui a été supprimé montrent seulement 7 places). Et puis, si vous appliquez le patch, elle devrait s'appliquer proprement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X