Comme le symbole ~, le symbole ^ accepte un numéro après lui.

Au lieu d'entrer le nombre de générations à remonter (ce que ~ fait), le symbole ^ détermine quel parent est à remonter. Attention, un merge commit a deux parents ce qui peut porter à confusion.

Normalement Git suit le "premier" parent pour un commit/merge, mais avec un numéro suivi de ^ le comportement par défaut est modifié.

Assez de bla bla, passons à l'action.

Avant checkout

Git avant checkout


Nous avons un commit/merge. Si nous faisons checkout master^ sans le symbole, on obtient le premier parent suivant ce commit.

git checkout master^

Après checkout

Git apres checkout


Facile -- C'est ce que nous faisons tout le temps.

Avant checkout

Git avant checkout


Nous allons spécifier le deuxième parent à la place.

git checkout master^2

Après checkout

Git apres checkout


Vous voyez ? Nous suivons le second parent.

Avant checkout

Git avant checkout


Les symboles ^ et ~ permettent de se déplacer de façon très efficace. Encore plus fou, ces symboles peuvent être enchainés ! Regardez cela :

git checkout HEAD~^2~2

Après checkout

Git apres checkout


Boum, vitesse du tonnerre !

Pour réussir le niveau, créez une nouvelle branche à la destination indiquée. Évidement ce serait plus rapide de spécifier le commit (C6 par exemple), mais faites-le plutôt avec les symboles de déplacement dont nous venons de parler !