313 votes

Comment faire un retour en arrière (réinitialisation) d'un dépôt Git à un commit particulier ?

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

Cependant, lorsque j'essaie de revenir en arrière dans l'outil GUI, mon système de fichiers local n'est pas mis à jour - je me retrouve toujours avec le dernier code source du projet.

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

480voto

kauppi Points 6529
git reset --hard <tag/branch/commit id>

Notes :

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

  • Si vous souhaitez commettre cet état, alors le référentiel distant pointe également vers le retour en arrière du commit : git push <reponame> -f ( utilisateur crédité )

294voto

Neall Points 12075

Mise à jour :

En raison de changements dans 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 :

Faire une copie de la branche dans son état actuel :

git branch crazyexperiment

(Le git branch <name> vous laissera avec votre branche actuelle toujours extraite).

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

git reset --hard c2e7af2b51

(Remplacer c2e7af2b51 avec le commit sur lequel vous voulez revenir).

Lorsque vous décidez que votre branche "crazy experiment" ne contient plus rien d'utile, vous pouvez la supprimer avec :

git branch -D crazyexperiment

Il est toujours agréable, lorsque l'on commence à utiliser des commandes git modifiant l'historique (reset, rebase), de créer des branches de sauvegarde avant de les exécuter. Finalement, une fois que vous serez à l'aise, vous ne trouverez pas cela nécessaire. Si vous modifiez votre historique d'une manière que vous ne voulez pas et que vous n'avez pas créé de branche de sauvegarde, regardez dans git reflog . Git conserve les commits pendant un certain temps même s'il n'y a pas de branches ou de tags pointant vers eux.

Réponse originale :

Une façon un peu moins effrayante de le faire que l'option git reset --hard est de créer une nouvelle branche. Supposons que vous êtes sur la branche master et le commit auquel vous voulez revenir est c2e7af2b51 .

Renommez votre branche principale actuelle :

git branch -m crazyexperiment

Vérifiez votre bon engagement :

git checkout c2e7af2b51

Faites votre nouvelle branche master ici :

git checkout -b master

Maintenant, vous avez toujours votre expérience folle à portée de main si vous voulez y jeter un coup d'oeil 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

10voto

ReggieB Points 1223

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

Faites un clic droit sur le commit auquel vous voulez retourner et sélectionnez "Reset master branch to here". Choisissez ensuite "hard" dans le menu suivant.

1voto

huff Points 31

Lorsque vous parlez de l'outil GUI, je suppose que vous utilisez Git pour Windows.

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

Avec l'interface graphique, vous devez "annuler ce commit" comme vous le faites avec l'historique à droite de votre vue. Vous remarquerez alors que vous avez tous les fichiers non désirés comme changements à livrer sur la gauche. Maintenant, vous devez faire un clic droit sur le titre gris au-dessus de tous les fichiers non livrés et sélectionner 'disregard changes'. Cela remettra vos fichiers dans l'état où ils étaient dans cette version.

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