1239 votes

Comment j’ai utilisé ' git reset--TETE dure ' de revenir à un précédent commit ?

Je sais que Git pistes les modifications que je fais à ma demande, et qu'elle détient sur eux jusqu'à ce que je valider les modifications, mais voici où j'en suis raccroché:

Lorsque je veux revenir à une précédente livraison j'utilise:

git reset --hard HEAD

Et Git retourne:

HEAD is now at 820f417 micro

Comment puis-je rétablir les fichiers sur mon disque dur retour à la précédente engager?

Mes prochaines étapes ont été:

git add .
git commit -m "revert"

Mais aucun des fichiers ont été modifiés sur mon disque dur...

Que suis-je en train de faire bon/mauvais?

1429voto

Mark Longair Points 93104

D'abord, il est intéressant de noter que, git reset --hard est potentiellement dangereux de commande, car il jette toutes vos modifications non validées. Pour plus de sécurité, vous devriez toujours vérifier que la sortie de l' git status est propre (qui est vide) avant de l'utiliser.

D'abord vous dire la chose suivante:

Donc, je sais que Git pistes les modifications que je fais à ma demande, et qu'elle détient sur eux jusqu'à ce que je valider les modifications, mais voici où j'en suis raccroché:

Dans le cas où cela révèle une hypothèse erronée, je dois dire que ce n'est pas correct. Git ne les registres de l'état des fichiers lorsque vous étape (avec git add) ou lors de la création d'un commit. Une fois que vous avez créé un commit qui a vos fichiers de projet dans un état particulier, ils sont très fort, mais jusqu'alors, Git n'est pas vraiment "suivi des modifications" à vos fichiers. (par exemple, même si vous n' git add de mettre en scène une nouvelle version du fichier, qui écrase la déjà mis en scène la version de ce fichier dans la zone de transit.)

Dans votre question, vous passez ensuite à poser les questions suivantes:

Lorsque je veux revenir à une précédente livraison j'utilise: git reset --hard HEAD Et git retourne: la TÊTE est maintenant à 820f417 micro

Comment puis-je rétablir les fichiers sur mon disque dur retour à la précédente engager?

Si vous n' git reset --hard <SOME-COMMIT> puis Git:

  • Faire de votre branche courante (typiquement master) de revenir au point à l' <SOME-COMMIT>.
  • Alors de rendre les fichiers dans votre arbre de travail et de l'index ("zone de transit"), les mêmes que les versions commis en <SOME-COMMIT>.

HEAD de points à votre branche courante (ou commit courant), donc tout ce qu' git reset --hard HEAD va faire est de jeter tous les changements que vous avez.

Donc, supposons que la bonne s'engager à ce que vous souhaitez revenir à l'est - f414f31. (Vous pouvez trouver que, par le biais git log ou de tout l'historique du navigateur.) Vous avez alors quelques options différentes selon exactement ce que vous voulez faire:

  • Passer d'une branche à point pour les plus âgés s'engager à la place. Vous pouvez le faire avec git reset --hard f414f31. Cependant, c'est la réécriture de l'histoire de votre agence, de sorte que vous devriez éviter si vous avez partagé cette branche avec n'importe qui. Aussi, les changements que vous avez fait après f414f31 ne sera plus dans l'histoire de votre master de la branche.
  • Créer un nouveau commit qui représente exactement le même état du projet en tant que f414f31, mais ajoute juste que sur l'histoire, de sorte que vous ne perdez pas toute l'histoire. 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`
    

301voto

uDaY Points 3568

AVERTISSEMENT: git clean -f sera supprimer sans traces de fichiers, ce qui signifie qu'ils sont partis pour de bon, car ils ne sont pas dans GitHub. Assurez-vous que vous voulez vraiment supprimer tous les sans traces de fichiers avant de le faire.


Essayer cela et voir git clean -f.

git reset --hard ne sera pas retirer sans traces de fichiers, où que git-clean va supprimer tous les fichiers de la zone racine du répertoire qui ne sont pas sous Git de suivi. J'espère que cette aide.

Sinon, @Paul Betts dit, vous devriez faire l' git clean -xdf.

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