Question Comment annuler (réinitialiser) un dépôt Git à un commit particulier? [dupliquer]


Cette question a déjà une réponse ici:

J'ai cloné un dépôt Git et j'ai ensuite essayé de le ramener à un commit particulier au début du processus de développement. Tout ce qui a été ajouté au référentiel après ce point est sans importance pour moi, donc je veux omettre tous les changements ultérieurs de mon code source local.

Cependant, lorsque j'essaie de revenir dans l'outil graphique, il ne met pas à jour mon système de fichiers local. Je me retrouve toujours avec le dernier code source du projet.

Quelle est la bonne façon d'obtenir la source d'un dépôt à partir d'un commit particulier dans l'historique du projet et d'omettre toutes les mises à jour ultérieures?


631
2017-10-24 04:22


origine


Réponses:


git reset --hard <tag/branch/commit id>

Remarques:

  • git reset sans le --hard L'option réinitialise l'historique de validation, mais pas les fichiers. Avec le --hard option les fichiers dans l'arbre de travail sont également réinitialisés. (utilisateur crédité)

  • Si vous souhaitez valider cet état pour que le référentiel distant pointe également vers la validation annulée, procédez comme suit: git push <reponame> -f (utilisateur crédité)


983
2017-10-24 04:24



Mettre à jour:

En raison des modifications apportées à la façon dont les branches de suivi sont créées et poussées, je ne recommande plus de renommer les branches. C'est ce que je recommande maintenant:

Faites une copie de la branche à son état actuel:

git branch crazyexperiment

(Le git branch <name> commande vous laissera avec votre branche actuelle encore vérifié.)

Réinitialisez votre branche actuelle à votre commit souhaité avec git reset:

git reset --hard c2e7af2b51

(Remplacer c2e7af2b51 avec le commit que vous voulez retourner.)

Lorsque vous décidez que votre branche expérimentale ne contient rien d'utile, vous pouvez la supprimer avec:

git branch -D crazyexperiment

C'est toujours agréable quand vous commencez avec des commandes git de modification de l'historique (reset, rebase) pour créer des branches de sauvegarde avant de les exécuter. Finalement, une fois que vous êtes à l'aise, vous ne le trouverez pas nécessaire. Si vous modifiez votre historique d'une manière que vous ne voulez pas et n'avez pas créé une branche de sauvegarde, regardez dans git reflog. Git reste actif pendant un bon moment même s'il n'y a pas de branches ou de balises pointant vers eux.

Réponse originale:

Une façon un peu moins effrayante de le faire que le git reset --hard La méthode consiste à créer une nouvelle branche. Supposons que vous êtes sur le master branche et l'engagement que vous voulez revenir est c2e7af2b51.

Renommez votre branche maîtresse actuelle:

git branch -m crazyexperiment

Découvrez votre bon engagement:

git checkout c2e7af2b51

Faites votre nouvelle branche principale ici:

git checkout -b master

Maintenant, vous avez encore votre expérience folle autour si vous voulez le regarder plus tard, mais votre branche principale est de retour à votre dernier bon point connu, prêt à être ajouté à. Si vous voulez vraiment jeter votre expérience, vous pouvez utiliser:

git branch -D crazyexperiment

372
2017-10-26 14:49



Pour ceux qui ont un git gui bent, vous pouvez aussi utiliser gitk.

Faites un clic droit sur le commit auquel vous voulez revenir et sélectionnez "Reset master branch to here". Ensuite, choisissez difficile dans le menu suivant.


12
2018-04-04 13:57



Lorsque vous dites "l'outil GUI", je suppose que vous utilisez Git For Windows.

IMPORTANT, je recommande fortement de créer une nouvelle branche pour le faire si vous ne l'avez pas déjà fait. De cette façon, votre maître peut rester le même pendant que vous testez vos changements.

Avec l'interface graphique, vous devez annuler ce commit comme vous l'avez fait avec l'historique à droite de votre vue. Ensuite, vous remarquerez que vous avez tous les fichiers indésirables en tant que modifications à commettre sur la gauche. Maintenant, vous devez faire un clic droit sur le titre gris au-dessus de tous les fichiers non-sélectionnés et sélectionnez «ne pas tenir compte des changements». Cela va remettre vos fichiers à la façon dont ils étaient dans cette version.


1
2017-10-14 14:33