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
(全文完)