Git: Comment revenir de l'état 'HEAD détaché'


218

Si l'on veut retirer une succursale:

git checkout 760ac7e

par exemple b9ac70b, comment peut-on revenir à la dernière tête connue b9ac70bsans connaître son SHA1?

Réponses:


332

Si vous vous souvenez quelle branche a été vérifiée avant (par exemple master), vous pouvez simplement

git checkout master

pour sortir de l' état HEAD détaché .

D'une manière générale: git checkout <branchname>vous en sortirez.

Si vous ne vous souvenez pas du dernier nom de la branche, essayez

git checkout -

Cela tente également de vérifier votre dernière branche extraite.


17
git checkout -- fonction de tueur!
dimpiax

1
Si vous ne faites pas, perdez git checkout -b new_branch_name-vous les commits effectués lorsque vous êtes dans l'état HEAD détaché?
jocassid

2
@jocassid Oui, vous le faites. Ils sont présents pendant un certain temps mais lorsqu'ils git gcsont exécutés, ils sont supprimés pour toujours. Vous pouvez les regarder git reflogaussi longtemps qu'ils sont encore là.
vérifie

ne perdrez-vous pas les validations / modifications que vous avez apportées dans HEAD détaché si vous le faites? N'est-ce pas une meilleure façon? stackoverflow.com/a/61489179/13087176
Tipsy boopenstein

@tipsyboopenstein correct. jocassid l'a déjà mentionné: stackoverflow.com/questions/11801071/…
eckes

16

Utilisez git reflogpour trouver les hachages des validations précédemment extraites.

Une commande de raccourci pour accéder à votre dernière branche extraite (vous ne savez pas si cela fonctionne correctement avec HEAD détaché et les validations intermédiaires) est git checkout -


4

J'ai eu ce cas de bord, où j'ai vérifié une version précédente du code dans laquelle la structure de mon répertoire de fichiers était différente:

git checkout 1.87.1                                    
warning: unable to unlink web/sites/default/default.settings.php: Permission denied
... other warnings ...
Note: checking out '1.87.1'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. 
Example:

  git checkout -b <new-branch-name>

HEAD is now at 50a7153d7... Merge branch 'hotfix/1.87.1'

Dans un cas comme celui-ci, vous devrez peut-être utiliser --force (lorsque vous savez que revenir à la branche d'origine et supprimer les modifications est une chose sûre à faire).

git checkout master n'a pas marché:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
web/sites/default/default.settings.php
... other files ...

git checkout master --force(ou git checkout master -f) travaillé:

git checkout master -f
Previous HEAD position was 50a7153d7... Merge branch 'hotfix/1.87.1'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

1

Vous avez peut-être effectué de nouveaux commits dans l' detached HEADétat. Je crois que si vous faites comme d'autres réponses le conseillent:

git checkout master
# or
git checkout -

alors vous risquez de perdre vos commits !! Au lieu de cela, vous voudrez peut-être faire ceci:

# you are currently in detached HEAD state
git checkout -b commits-from-detached-head

puis fusionnez commits-from-detached-headdans la branche que vous voulez, afin de ne pas perdre les commits.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.