Git中的HEAD ^和HEAD〜有什么区别?

当我在Git中指定祖先提交对象时,我在HEAD^HEAD~之间感到困惑。 html

二者都有一个“编号”版本,例如HEAD^3HEAD~2git

在我看来,它们看起来很是类似或相同,可是波浪号和插入符号之间是否有任何区别? spa


#1楼

之间的差HEAD^HEAD~深受上找到的图示(经过Jon Loeliger)中描述http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.htmlcode

本文档对于初学者可能有点晦涩,所以我复制了如下插图: 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

#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


#3楼

HEAD ^^^与HEAD〜3相同,选择HEAD以前的第三次提交 io

HEAD ^ 2指定合并提交中的第二个头


#4楼

^<n>格式容许您选择提交的第n个父级(与合并相关)。 ~<n>格式容许您选择始终在第一个父项以后的第n个祖先提交。 有关一些示例,请参见git-rev-parse的文档。


#5楼

  • HEAD〜指定“分支”上的第一个父对象

  • HEAD ^容许您选择提交的特定父级

一个例子:

若是要遵循侧分支,则必须指定相似

master~209^2~15
相关文章
相关标签/搜索