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?
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.
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.)
git reset c14809fafb08b9e96ff2879999ba8c807d10fb07
c'est ce que tu cherches...
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