Git命令中波浪號~與脫字元^的區別

0.前言

波浪號~,英文名叫 tilde。脫字元^,英文名叫caret

這兩種符號常見於git reset的情景,簡單的項目結構和操作一般不會涉及到兩者之間的區別,似乎用哪個都可以。如果遇到比較繁雜的提交歷史,可能就要好好體驗一下二者更深層的含義。

1.兩種符號的異同和轉換

1.1 ~表示當前分支所屬提交時間線上的某個提交

只適用於當前分支所在的線性的歷史提交。

如果提交歷史為

A---B---C---D

當前所在點為HEAD=D,那麼

C=HEAD~1
B=HEAD~2
A=HEAD~3

1.2 ^表示與分支合併操作相關時父分支所屬提交的編號標識

如果提交歷史如下所示,當前所在點為HEAD=D,那麼

  E---F
 /     \
A---B---C---D
           /
      G---H
D=HEAD

C=D^1
H=D^2
G=D^2^1=H^1

B=C^1
F=C^2=D^^2
E=F^1

1.3 兩者之間的轉換

仍然以1.2節中的例子為準,下面是兩種符號之間的聯繫和轉換。

D=HEAD
C=D~1=D^1=D^
B=D~2
A=D~3

# D由H和C合併產生,C是當前分支中的父節點,H是屬於另一個分支的第二個父節點
C=D^1
H=D^2
G=D^2^1=H^1

# C由B和F合併產生,B是C的當前分支所在時間線中的父節點
# F是C的第二個父節點,屬於另一個分支
B=C^1
F=C^2=D^^2=D~1^2
E=F^1

A=B^1=B~1=C^1^1=C~1^1=D^1^1^1=D~3

(全文完)


參考資料

[1] What’s the difference between HEAD^ and HEAD~ in Git?

本文作者 :phillee
發表日期 :2022年01月19日
本文鏈接//www.cnblogs.com/phillee/p/15821555.html
版權聲明 :自由轉載-非商用-非衍生-保持署名(創意共享3.0許可協議/CC BY-NC-SA 3.0)。轉載請註明出處!
限於本人水平,如果文章和程式碼有表述不當之處,還請不吝賜教。

感謝您的支援

¥ 打賞

微信支付

Tags: