当我在Git中指定祖先提交对象时,我在HEAD^
和HEAD~
之间感到困惑。 html
二者都有一个“编号”版本,例如HEAD^3
和HEAD~2
。 git
在我看来,它们看起来很是类似或相同,可是波浪号和插入符号之间是否有任何区别? spa
之间的差HEAD^
和HEAD~
深受上找到的图示(经过Jon Loeliger)中描述http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html 。 code
本文档对于初学者可能有点晦涩,所以我复制了如下插图: htm
G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A A = = A^0 B = A^ = A^1 = A~1 C = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2
值得注意的是,git还具备用于跟踪“从您到那里” /“如今要回去”的语法-例如, HEAD@{1}
将引用您跳转到的位置到新的提交位置。 对象
基本上HEAD@{}
变量捕获HEAD移动的历史记录,您可使用git reflog
命令查看git reflog
来决定使用特定的head。 文档
例: get
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 commmit 35a7332 HEAD@{26}: checkout: moving from temp2_new_br to temp2_new_br 35a7332 HEAD@{27}: commit (amend): 3rd commmit 72c0be8 HEAD@{28}: commit (amend): 3rd commmit
一个例子多是我作了local-commits a-> b-> c-> d,而后我放弃了2次提交来检查个人代码git reset HEAD~2
而后我想将HEAD移回d- git reset HEAD@{1}
。 it
HEAD ^^^与HEAD〜3相同,选择HEAD以前的第三次提交 io
HEAD ^ 2指定合并提交中的第二个头
^<n>
格式容许您选择提交的第n个父级(与合并相关)。 ~<n>
格式容许您选择始终在第一个父项以后的第n个祖先提交。 有关一些示例,请参见git-rev-parse的文档。
HEAD〜指定“分支”上的第一个父对象
HEAD ^容许您选择提交的特定父级
一个例子:
若是要遵循侧分支,则必须指定相似
master~209^2~15