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
相關文章
相關標籤/搜索