Comment utiliser ‘git reset –hard HEAD’ pour revenir à un commit précédent?

Je sais que Git suit les changements que je fais dans mon application et qu’il les retient jusqu’à ce que je commette les changements, mais voici ce que je raccroche:

Lorsque je veux revenir à un précédent engagement, j’utilise:

git reset --hard HEAD 

Et Git revient:

 HEAD is now at 820f417 micro 

Comment puis-je retourner les fichiers sur mon disque dur à ce commit précédent?

Mes prochaines étapes étaient:

 git add . git commit -m "revert" 

Mais aucun des fichiers n’a changé sur mon disque dur …

Qu’est-ce que je fais bien / mal?

Tout d’abord, il est toujours utile de noter que git reset --hard est une commande potentiellement dangereuse, car elle rejette toutes vos modifications non validées. Pour des raisons de sécurité, vous devez toujours vérifier que la sortie de l’ git status est propre (c’est-à-dire vide) avant de l’utiliser.

Au départ, vous dites ce qui suit:

Donc, je sais que Git suit les changements que je fais à mon application et qu’il les retient jusqu’à ce que je commette les modifications, mais voici ce que je raccroche:

Au cas où cela révélerait une hypothèse erronée, je devrais dire que ce n’est pas correct. Git enregistre uniquement l’état des fichiers lorsque vous les git add (avec git add ) ou lorsque vous créez un commit. Une fois que vous avez créé un commit qui contient vos fichiers de projet dans un état particulier, ils sont très sûrs, mais jusque-là, Git ne suit pas vraiment les modifications apscopes à vos fichiers. (Par exemple, même si vous git add à la mise en scène d’une nouvelle version du fichier, celle-ci remplace la version précédente de ce fichier dans la zone de transfert).

Dans votre question, vous continuez ensuite:

Quand je veux revenir à un commit précédent, j’utilise: git reset –hard HEAD Et git retourne: HEAD est maintenant à 820f417 micro

Comment puis-je retourner les fichiers sur mon disque dur à ce commit précédent?

Si vous faites git reset --hard alors Git va:

  • Rendez votre twig actuelle (généralement master ) de nouveau au niveau de .
  • Rendez ensuite les fichiers de votre arborescence de travail et l’index (“zone de transit”) identiques aux versions validées dans .

HEAD pointe vers votre twig actuelle (ou commit en cours), donc tout ce que git reset --hard HEAD fera est de jeter tous les changements non validés que vous avez.

Donc, supposons que le bon commit auquel vous voulez revenir est f414f31 . (Vous pouvez le trouver via le git log ou tout navigateur d’historique.) Vous disposez alors de plusieurs options en fonction de ce que vous voulez faire:

  • Changez votre twig actuelle pour qu’elle pointe vers le plus ancien commit. Vous pouvez le faire avec git reset --hard f414f31 . Cependant, ceci est en train de réécrire l’historique de votre twig, vous devriez donc l’éviter si vous avez partagé cette twig avec n’importe qui. De plus, les commits que vous avez f414f31 après f414f31 ne figureront plus dans l’historique de votre twig principale.
  • Créez un nouveau commit qui représente exactement le même état que le projet f414f31 , mais l’ajoute simplement à l’historique afin de ne perdre aucun historique. Vous pouvez le faire en utilisant les étapes suggérées dans cette réponse – quelque chose comme:

     git reset --hard f414f31 git reset --soft HEAD@{1} git commit -m "Reverting to the state of the project at f414f31" 

ATTENTION: git clean -f supprime les fichiers non suivis, ce qui signifie qu’ils sont définitivement perdus car ils ne sont pas stockés dans le référentiel. Assurez-vous de vouloir supprimer tous les fichiers non suivis avant de le faire.


Essayez ceci et voyez git clean -f .

git reset --hard ne supprimera pas les fichiers non suivis, où git-clean supprimera tous les fichiers du répertoire racine suivi qui ne sont pas sous suivi Git.

Alternativement, comme l’a dit @Paul Betts, vous devriez faire git clean -xdf (attention cependant – cela supprime également tous les fichiers ignorés).