關於Git HEAD^與HEAD~的關系
請參考下圖,來自stackoverflow
http://stackoverflow.com/questions/2221658/whats-the-difference-between-head-and-head-in-git
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = A^2 = 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
G-D-B-A可以認為是主干,其他都是merge進來的其他分支節點。
下圖是我本地的項目的部分分支圖:
點中其中的一個節點就可以看到Parents和child,一般來說,直線相連的上級就是第一個parent,斜線連接過來的是merge進來的。
如果reset到錯誤的head上,然后再git pull的話,很有可能會提示有diverge,這樣情況下pull代碼的話,會出現conflict,需要手動merge,這樣容易出現問題。
如果reset到正確的branch上,git pull就可以直接fast forward了。