web-dev-qa-db-fra.com

Annuler supprimer dans GIT

J'ai fait quelque chose de très stupide. J'ai fait une validation avec git commit (modifications de fichiers + nouveaux fichiers) (C). Puis j'ai fait modifier le dernier commit. Ensuite, j'ai supprimé tous les fichiers récursivement (!) En utilisant git rm -r Puis j'ai fait un autre git commit (C).

 A-B-C 
 ↑ 
 Maître 

Existe-t-il un moyen de restaurer les fichiers en conservant les modifications apportées dans mon premier commit? (C) Je préférerais ne pas retourner à (B). J'ai essayé git reset --soft head ^, donc le statut de git répertorie les fichiers que j'ai supprimés, puis j'ai vérifié avec git, mais toujours pas de chance. Je ne sais même pas si c'est possible.

55
Nately

Faites-vous une faveur et ne faites pas git checkout <hash> comme l’a suggéré l’autre réponse et s’attaquer à 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

ATTENTION: validez les fichiers non validés avant d'exécuter cette commande, sinon vous allez tous les perdre

Les fichiers supprimés devraient être de nouveau.

Si non et si vous pouvez trouver le commit que vous voulez (C, etc. - votre question n'est pas claire) de git reflog, fais juste git reset --hard <hash from reflog> et vous devriez être tous ensemble.

167
manojlds

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). Utilisation git reflog pour obtenir le hash de commit et git checkout <hash> ou une autre commande appropriée pour atteindre l’ancien état C1.

6
Sascha