web-dev-qa-db-fra.com

Basculement temporaire de la copie de travail sur un commit spécifique de Git

Comment passer à une validation Git spécifique sans perdre toutes les validations effectuées après?

Je souhaite que les fichiers locaux soient modifiés, mais la base de données de commits reste intacte, seul le pointeur de la position actuelle est défini sur la validation actuellement sélectionnée.

Je souhaite modifier l'état des fichiers en validation spécifique, exécuter le projet et, une fois l'opération terminée, restaurer les fichiers à la dernière validation.

Comment faire cela sans compresser le dossier du projet entier?

228
Paul

Si vous êtes dans une certaine branche mybranch, continuez et git checkout commit_hash. Ensuite, vous pouvez revenir à votre succursale par git checkout mybranch. J'ai eu le même jeu en bissectant un bogue aujourd'hui :) En outre, vous devriez savoir sur git bisect .

324
Alexander Pavlov

D'abord, utilisez git log pour voir le journal, choisissez le commit que vous voulez, notez le hash sha1 utilisé pour identifier le commit. Ensuite, exécutez git checkout hash. Une fois que vous avez terminé, git checkout original_branch. Cela présente l’avantage de ne pas déplacer le HEAD, il bascule simplement la copie de travail sur un commit spécifique.

52
Femaref

En plus des autres réponses ci-dessous vous expliquant comment utiliser git checkout <the-hash-you-want>, il est utile de savoir que vous pouvez revenir à votre lieu d'utilisation:

git checkout @{-1}

C'est souvent plus pratique que:

git checkout what-was-that-original-branch-called-again-question-mark

Comme vous pouvez vous y attendre, git checkout @{-2} vous ramènera à la branche dans laquelle vous vous trouviez il y a deux git checkout, et de la même manière pour les autres numéros. Si vous pouvez vous rappeler où vous étiez pour des nombres plus importants, 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 sur laquelle vous serez à l'avenir, ce qui est dommage.

9
Benjohn