當我在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