Revenir à un commit spécifique basé sur l'id de commit avec Git? [dupliquer]

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

Avec git log, j'obtiens une liste de commits que j'ai faits jusqu'à présent.

commit f5c5cac0033439c17ebf905d4391dc0705dbd5f1
Author: prosseek 
Date:   Fri Sep 3 14:36:59 2010 -0500

    Added and modified the files.

commit c14809fafb08b9e96ff2879999ba8c807d10fb07
Author: prosseek 
Date:   Tue Aug 31 08:59:32 2010 -0500

    Just simple test for core.editor.

... etc ...
  • Comment puis-je revenir à un commit spécifique? Par exemple, que dois-je faire si je veux revenir à commit c14809fafb08b9e96ff2879999ba8c807d10fb07?

  • Y a t il tout autre/meilleure façon de revenir à un commit avec Git? Par exemple, puis-je mettre une étiquette de chaque commit pour le récupérer avec l'étiquette?

219
git
demandé sur prosseek 2010-09-03 23:49:46

4 réponses

Voulez-vous ramener votre repo à cet état? Ou vous voulez juste que votre repo local ressemble à ça?

Si vous le faites

git reset --hard c14809fa

Cela rendra votre code local et votre historique local comme lors de ce commit. Mais si vous vouliez pousser cela à quelqu'un d'autre qui a la nouvelle histoire, cela échouerait.

Si vous le faites

git reset --soft c14809fa

Cela rendra vos fichiers locaux modifiés pour être comme ils étaient alors, mais laissez votre historique, etc. la même.

Alors, que faire exactement vous voulez faire avec cette réinitialisation?

Modifier -

Vous pouvez ajouter des "tags" à votre repo.. et puis revenez à une étiquette. Mais une balise est vraiment juste un raccourci vers le sha1.

Vous pouvez marquer ceci comme TAG1.. puis un git reset --soft c14809fa, git reset --soft TAG1, ou git reset --soft c14809fafb08b9e96ff2879999ba8c807d10fb07 serions tous faire la même chose.

363
répondu bwawok 2010-09-03 20:17:21

Je pense que la réponse de bwawok est fausse à un moment donné:

Si vous le faites

git reset --soft c14809fa

Cela rendra vos fichiers locaux modifiés pour être comme ils étaient alors, mais laissez votre historique, etc. la même.

Selon le manuel : git-reset , "git reset --soft"...

Ne touche pas du tout le fichier d'index ni l'arborescence de travail (mais réinitialise la tête sur , comme tous les modes le font). Cela laisse tous vos fichiers modifiés "modifications à valider", comme git le statut le mettrait.

Donc, il va "supprimer" les nouveaux commits de la branche. Cela signifie, Après avoir regardé votre ancien code, vous ne pouvez pas aller à nouveau au nouveau commit dans cette branche, facilement. Donc, il fait l'opposide comme décrit par bwawok: les fichiers locaux ne sont pas modifiés (ils ressemblent exactement à "git reset --soft"), mais l'historique est modifié (la branche est tronquée après la validation spécifiée).

La commande pour la réponse de bwawok pourrait être:

git checkout <commit>

Vous pouvez l'utiliser pour jeter un coup d'œil à l'ancienne révision: à quoi ressemblait mon code hier?

(je sais, je devrais mettre cela dans les commentaires à cette réponse, mais stackoverflow ne me permet pas de le faire! Ma réputation est trop faible.)

142
répondu Peter A 2012-09-18 09:01:29

git reset c14809fafb08b9e96ff2879999ba8c807d10fb07 c'est ce que tu cherches...

18
répondu Doches 2010-09-03 19:54:28

Si vous souhaitez forcer le problème, vous pouvez faire:

git reset --hard c14809fafb08b9e96ff2879999ba8c807d10fb07

Vous renvoie à la façon dont votre clone git ressemblait au moment de la vérification

3
répondu kenzaraque 2013-03-18 05:42:02