Comment passer à une validation Git spécifique sans perdre toutes les validations faites après ?
Je veux que les fichiers locaux soient modifiés, mais la base de données des validations restera intacte, seul le pointeur de position actuelle est défini sur la validation actuellement sélectionnée.
Je veux changer l'état des fichiers en commit spécifique, exécuter le projet et, une fois terminé, restaurer les fichiers au dernier commit.
Comment faire cela sans zipper tout le dossier du projet?
Réponses:
Si vous êtes dans une certaine branche
mybranch
, allez-y etgit checkout commit_hash
. Ensuite, vous pouvez retourner à votre succursale pargit checkout mybranch
. J'ai eu le même jeu bissectant un bogue aujourd'hui :) De plus, vous devriez connaître git bissect .la source
git checkout commit_hash
si vous êtes sur un référentiel propre et que vous n'avez pas besoin de créer de branche. Pourrait être plus facile pour certains cas d'utilisation (comme le mien).git bisect
référence; quel outil extrêmement utile!Tout d'abord, utilisez
git log
pour voir le journal, choisissez le commit que vous voulez, notez le hachage sha1 qui est utilisé pour identifier le commit. Ensuite, exécutezgit checkout hash
. Une fois que vous avez terminé,git checkout original_branch
. Cela a l'avantage de ne pas déplacer le HEAD, il bascule simplement la copie de travail vers un commit spécifique.la source
git checkout <original_branch>
.git checkout HEAD
est effectivement un NOOPgit reset --hard <hash>
modifie la TÊTE de la branche actuelle, tandis quegit checkout <hash>
vous obtenez un paiement détaché qui ne modifie aucune branche, et vous pouvez facilement revenir sans connaître l'ID de hachage d'origine de votre branche, comme indiqué dans cette réponse.En plus des autres réponses ici vous montrant comment
git checkout <the-hash-you-want>
cela vaut la peine de savoir que vous pouvez revenir à l'endroit où vous utilisiez:C'est souvent plus pratique que:
Comme vous pouvez vous
git checkout @{-2}
y attendre, vous ramènera à la succursale où vous étiez il y a deuxgit checkout
ans, et de même pour les autres numéros. Si vous vous souvenez où vous étiez pour un plus grand nombre, vous devriez obtenir une sorte de médaille pour cela.Malheureusement pour la productivité,
git checkout @{1}
ne vous emmène pas dans la branche où vous serez à l'avenir, ce qui est dommage.la source
git checkout -
c'est un raccourci pourgit checkout @{-1}
@{n}
syntaxe générale , car elle fonctionne avec de nombreuses commandes git. J'ai eu du mal à ajouter votre raccourci sans rendre la réponse assez confuse. Au lieu de cela, j'ai voté pour votre commentaire - j'espère que les gens le verront. Merci encore.git merge -
pour fusionner la branche que vous avez extraite en dernier dans la branche actuellement extraite. C'est commecd -
dans bash.