web-dev-qa-db-fra.com

Comment détacher intentionnellement HEAD in git?

Si je fais git checkout HEAD^, J'ai compris:

$ git checkout HEAD^
Note: checking out 'HEAD^'.

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...
$

Les utilisateurs vétérans de git sont probablement très familiers avec cela. Mais si je le fais git checkout HEAD, Rien ne se passe:

$ git checkout HEAD
$

Je voudrais créer l'état "HEAD détaché" pour le commit à la tête de ma branche actuelle. Comment je fais ça?

42
Russell Silva

Depuis git 1.7.5 (avril 2011), vous pouvez utiliser la commande git checkout --detach.

Voir commit 326696

checkout: introduisez --detach Synonyme de "git checkout foo^{commit}"

Par exemple, on peut l'utiliser lors d'une fusion temporaire pour tester que deux sujets fonctionnent bien ensemble.


Commit 8ced1aa (git 1.7.11.3, juillet 2012) interdit --detach Sur la branche à naître, donc cela n'échouera pas sur un HEAD nul:

git checkout --Orphan foo
git checkout --detach
git symbolic-ref HEAD

Seul le prochain git 1.8.4.2 ou 1.8.5 (Q4 2013) clarifie la syntaxe. Voir commit 26776c9 :

Séparez ce cas en deux formes syntaxiques, imitant la façon dont la section DESCRIPTION montre cette utilisation.
Mettez également à jour le texte qui explique la syntaxe pour nommer le commit à détacher HEAD à clarifier.

'git checkout' [--detach] <commit>::

Préparez-vous à travailler au-dessus de <commit>, En détachant HEAD ( voir la section "TÊTE DÉTACHÉE" ), et en mettant à jour l'index et l'arborescence sera l'état enregistré dans le commit plus les modifications locales.

  1. Lorsque l'argument <commit> Est un nom de branche, l'option --detach Peut être utilisée pour détacher HEAD à l'extrémité de la branche (git checkout <branch> Vérifierait que sans détacher HEAD).

  2. L'omission de <branch> Détache HEAD à l'extrémité de la branche actuelle .

Ce dernier point est précisément ce que vous voulez faire pour votre branche actuelle:

git checkout --detach
39
VonC

Cette commande crée un état de tête détaché à partir d'un nom de branche donné (dans ce cas, maître):

git checkout master^0

La vérification des hachages de validation crée également automatiquement un état de tête détaché, pas besoin de ^0:

git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0

Et bien sûr, les hachages plus courts:

git checkout 823112f
10
platforms