Je sais que Git suit les modifications que j'ai apportées à mon application et qu'elle les conserve jusqu'à ce que je les valide, mais voici où je raccroche:
Quand je veux revenir à un commit précédent, j'utilise:
git reset --hard HEAD
Et Git revient:
HEAD is now at 820f417 micro
Comment puis-je rétablir les fichiers sur mon disque dur à la précédente validation?
Mes prochaines étapes ont été:
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?
Premièrement, il est toujours intéressant de noter que git reset --hard
est une commande potentiellement dangereuse, car elle jette toutes vos modifications non validées. Pour des raisons de sécurité, vous devez toujours vérifier que la sortie de git status
est propre (c'est-à-dire vide) avant de l'utiliser.
Au début, vous dites ce qui suit:
Je sais donc que Git suit les modifications que j'ai apportées à ma candidature et les conserve jusqu'à ce que je les valide, mais voici où je suis suspendu:
C'est faux. Git enregistre uniquement l'état des fichiers lorsque vous les mettez en scène (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 "surveille pas vraiment les modifications" de vos fichiers. (Par exemple, même si vous exécutez git add
pour créer une nouvelle version du fichier, cela remplace la version précédemment stockée de ce fichier dans la zone de transfert.)
Dans votre question, vous posez ensuite la question suivante:
Quand je veux revenir à un commit précédent, j'utilise: git reset --hard HEAD Et git renvoie: HEAD est maintenant à 820f417 micro
Comment puis-je rétablir les fichiers sur mon disque dur à la précédente validation?
Si vous faites git reset --hard <SOME-COMMIT>
alors Git va:
master
) de nouveau au point à <SOME-COMMIT>
.<SOME-COMMIT>
.HEAD
pointe vers votre branche actuelle (ou votre commit actuel), donc tout ce que git reset --hard HEAD
fera est de supprimer toutes les modifications non validées que vous avez.
Supposons donc que le bon commit sur lequel vous souhaitez revenir soit f414f31
. (Vous pouvez le trouver via git log
ou n’importe quel navigateur d’historique.) Vous avez alors quelques options différentes en fonction de ce que vous voulez faire:
git reset --hard f414f31
. Cependant, il s’agit d’une réécriture de l’historique de votre branche. Vous devez donc l’éviter si vous avez partagé cette branche avec un tiers. De plus, les commits que vous avez effectués après f414f31
ne seront plus dans l'historique de votre branche master
.Créez un nouveau commit qui représente exactement le même état du projet que f414f31
, mais l'ajoute simplement à l'historique afin que vous ne perdiez aucun historique. Vous pouvez le faire en suivant 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"
AVERTISSEMENT:
git clean -f
supprimera 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 réellement 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, alors que git-clean
supprimera tous les fichiers du répertoire racine suivi qui ne se trouvent pas sous le suivi Git.
Alternativement, comme @Paul Betts l'a dit, vous pouvez le faire (attention cependant - cela supprime également tous les fichiers ignorés)
git clean -df
git clean -xdf
ATTENTION! Ceci supprimera également les fichiers ignorés