Est-il possible de récupérer les modifications non validées dans le répertoire de travail à partir de git reset --hard HEAD
?
Réponses
Trop de publicités?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! :)
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 **
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.
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.