Table of Contents
在 git 中我们常常会见到波浪号 ~ 与脱字符(或者叫插入符)^ 两个符号,例如 get reset --hard HEAD~2 或 git reset --hard HEAD^2,那么这两个符号有什么区别呢?
结论
-
波浪号
~是指第几代祖先提交; -
脱字符
^是指第几个父提交; -
这两个符号可以混合使用;
例子
G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A
A = = A^0B = A^ = A^1 = A~1C = A^2D = A^^ = A^1^1 = A~2E = B^2 = A^^2F = B^3 = A^^3G = A^^^ = A^1^1^1 = A~3H = D^2 = B^^2 = A^^^2 = A~2^2I = F^ = B^3^ = A^^3^J = F^2 = B^3^2 = A^^3^2说明
波浪号(~)
<rev>~<n>指 rev 提交的第 n 代祖先提交。
-
A~0第 0 代祖先提交,即 A 本身; -
A~与A~1等价,指第一代祖先,即父提交; -
当同一祖先层级有多个提交时,
~都指向当前层级左起第一个提交,例如A~是指 B 而不是 C,A~2指 D 而不是 E 或 F; -
A~~~与A~3表示相同的意义,即 A 的第三代祖先提交;
脱字符,也叫插入符(^)
<rev>~<n>指 rev 提交的第 n 个父提交。
-
A^0第 0 个父提交,即 A 本身; -
A^与A^1等价 同时也与A~、A~1等价,指第一个父提交; -
^对父提交的指向也是从左算起,如A^指 B,A^2指 C; -
A^^^与A^3含义不同,A^^^相当于A^1^1^1的缩写,指 A 的父的父的父,与A~3相同,即指 G。而A^3则指 A 的第 3 个父提交,A 只有两个父提交 B、C,故不存在;
参考资料