56 votes

Annuler supprimer dans GIT

J'ai fait quelque chose de très stupide. J'ai fait un commit avec git commit (fichier des modifications + nouveaux fichiers) (C). Ensuite, j'ai fait modifier le dernier commit. Ensuite, j'ai supprimé tous les fichiers de manière récursive (!) à l'aide de git rm-r Puis j'ai fait un autre git commit (C).

A-B-C
↑
maître

Est-il un moyen de restaurer les fichiers mais conserver les modifications que j'ai eu dans mon premier commit? (C) Je préfère ne pas revenir à (B). J'ai essayé de faire un git reset --soft tête^, alors le git status listes des fichiers que j'ai supprimé, puis j'ai fait un git checkout, mais toujours pas de chance. Je ne sais même pas si c'est possible.

172voto

manojlds Points 96599

Faites-vous une faveur et ne faites pas git checkout <hash> comme le suggère l'autre réponse et ne vous exposez pas à plus de problèmes.

SI vous avez supprimé le fichier de votre répertoire de travail et n'avez pas encore validé les modifications, procédez comme suit:

 git checkout -f
 

Les fichiers supprimés devraient être de nouveau.

Si ce n'est pas le cas et si vous pouvez trouver le commit que vous voulez (C, etc. - votre question n'est pas claire) entre git reflog , faites juste git reset --hard <hash from reflog> et vous devriez être prêt.

6voto

Sascha Points 689

Si je vous ai bien compris, vous avez récrit le commit C. Ainsi, le commit original, appelons-le C1, n'est pas accessible depuis votre graphe de commit, mais il est toujours là (git conserve tous les commits pendant un certain temps). Utilisez git reflog pour obtenir le hachage de validation et git checkout <hash> ou une autre commande appropriée pour atteindre l'ancien état C1.

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