1034 votes

Ce qui ' la différence entre chef ^ et tête ~ git ?

Lorsque je spécifie un objet de validation ancêtre dans Git, je suis confus entre et .

Les deux ont une version « numérotée » comme et .

Ils semblent très similaires ou la même chose pour moi, mais y a-t-il des différences ?

1104voto

Greg Bacon Points 50449

HEAD^ signifie que le premier parent de l'extrémité de la branche courante.

Rappelez-vous que git commet peut avoir plus d'un parent. HEAD^ "est l'abréviation de HEAD^1, et vous pouvez également vous adresser HEAD^2 et ainsi de suite selon le cas.

Vous pouvez obtenir pour les parents de s'engager, non seulement HEAD. Vous pouvez également déplacer en arrière à travers les générations: par exemple, master~2 signifie que les grands-parents de l'extrémité de la branche master, favorisant ainsi le premier parent en cas d'ambiguïté. Ces prescripteurs peuvent être enchaînés de manière arbitraire , par exemple, topic~3^2.

Pour plus de détails, voir "Spécification des Révisions" dans l' git rev-parse de la documentation.

372voto

g_fred Points 1791

La différence entre et est bien décrite par l’illustration (par Jon Loeliger) trouvée sur http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html.

Cette documentation peut être un peu obscure pour les débutants donc j’ai reproduit cette illustration ci-dessous :

322voto

Les deux ~ et ^ sur leurs propres reportez-vous à la mère de le commettre (~~ et ^^ des grands-parents de s'engager, etc.) Mais ils diffèrent en ce sens lorsqu'ils sont utilisés avec des chiffres:

  • ~2 signifie deux niveaux dans la hiérarchie, par le premier parent si un commit a plus d'un parent

  • ^2 signifie que le deuxième parent où un commit a plus d'un parent (soit parce que c'est une fusion)

Ceux-ci peuvent être combinés, de sorte HEAD~2^3 moyen HEAD's grands-parents de s'engager troisième parent s'engager.

35voto

jamessan Points 16420

Le format vous permet de sélectionner le n-ième parent du commit (pertinent lors des fusions). Le format vous permet de sélectionner la validation de la nième ancêtre, toujours en suivant le premier parent. Voir la documentation de git-rev-parsepour quelques exemples.

25voto

ashish Points 21

Ici, il est intéressant de noter que git a aussi un tracker "de l'-où-vous-est venue"/"voulez-pour-aller-retour-maintenant". par exemple TÊTE de@{1} = référence à l'endroit où vous avez sauté à nouveau commit emplacement. Fondamentalement, la TÊTE de@{} les variables de capture de l'histoire des mouvements de la TÊTE, et vous pouvez décider d'utiliser un particulier de la tête en regardant dans les reflogs de git par commande = git reflog exemple -

`0aee51f HEAD@{0}: reset: moving to HEAD@{5}
290e035 HEAD@{1}: reset: moving to HEAD@{7}
0aee51f HEAD@{2}: reset: moving to HEAD@{3}
290e035 HEAD@{3}: reset: moving to HEAD@{3}
9e77426 HEAD@{4}: reset: moving to HEAD@{3}
290e035 HEAD@{5}: reset: moving to HEAD@{3}
0aee51f HEAD@{6}: reset: moving to HEAD@{3}
290e035 HEAD@{7}: reset: moving to HEAD@{3}
9e77426 HEAD@{8}: reset: moving to HEAD@{3}
290e035 HEAD@{9}: reset: moving to HEAD@{1}
0aee51f HEAD@{10}: reset: moving to HEAD@{4}
290e035 HEAD@{11}: reset: moving to HEAD^
9e77426 HEAD@{12}: reset: moving to HEAD^
eb48179 HEAD@{13}: reset: moving to HEAD~
f916d93 HEAD@{14}: reset: moving to HEAD~
0aee51f HEAD@{15}: reset: moving to HEAD@{5}
f19fd9b HEAD@{16}: reset: moving to HEAD~1
290e035 HEAD@{17}: reset: moving to HEAD~2
eb48179 HEAD@{18}: reset: moving to HEAD~2
0aee51f HEAD@{19}: reset: moving to HEAD@{5}
eb48179 HEAD@{20}: reset: moving to HEAD~2
0aee51f HEAD@{21}: reset: moving to HEAD@{1}
f916d93 HEAD@{22}: reset: moving to HEAD@{1}
0aee51f HEAD@{23}: reset: moving to HEAD@{1}
f916d93 HEAD@{24}: reset: moving to HEAD^
0aee51f HEAD@{25}: commit (amend): 3rd commmmit
35a7332 HEAD@{26}: checkout: moving from temp2_new_br to temp2_new_br
35a7332 HEAD@{27}: commit (amend): 3rd commmmit
72c0be8 HEAD@{28}: commit (amend): 3rd commmmit`

Un exemple pourrait être que --> je n'ai locale-s'engage a->b->c->d et maintenant je suis de retour de jeter 2 s'engage à vérifier mon code - git reset HEAD~2 et puis, après ce que je souhaite déplacer ma TÊTE en arrière à d - git reset HEAD@{1}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X