HEAD是当前分支的指针。我已经看到了HEAD祖先的各种符号,包括
HEAD~2
HEAD^2
HEAD@{2}
HEAD~~
HEAD^^
上述每一个意味着什么?这方面的文件在哪里?
答案 0 :(得分:57)
来自文档here。
HEAD~2
:2提交比HEAD更早HEAD^2
:HEAD的第二个父级,如果HEAD是合并,则为非法HEAD@{2}
:引用git reflog
HEAD~~
:2提交比HEAD更早HEAD^^
:2提交比HEAD更早如果HEAD是合并,那么
某些组合和同义词
First Parent First Grandparent Second Parent Second Grandparent
HEAD~
HEAD^
HEAD~1 HEAD~2 HEAD^2 HEAD^2~
HEAD^1 HEAD^^ HEAD^2^
答案 1 :(得分:14)
git reference suffixes(^ N,~N,@ {...})
ref~
是ref~1
的简写,表示提交的第一个父级。 ref~2
表示提交的第一个父母的第一个父母。 ref~3
表示提交的第一个父母的第一个父母的第一个父母。等等。
ref^
是ref^1
的简写,表示提交的第一个父级。但是两者的不同之处在于ref^2
表示提交的第二个父级(请记住,提交在合并时可以有两个父级)。
可以组合^和〜运算符。
答案 2 :(得分:0)
我计算每个~
或^
的意思是“返回上一级”。如果~
旁边有一个数字(例如~n
),则n用作乘法器。如果^
旁边有一个数字(例如^n
),则n是要使用的第n个父对象(或在{{1}中从左到右列位置的横向移动}。
示例:
git log --graph
上述标记的坐标:
$ git log --oneline --graph
* 29392c8 (HEAD -> master, tag: A) A
|\
| * a1ef6fd (tag: C) C
| |
| \
*-. \ 8ae20e9 (tag: B) B
|\ \ \
| | |/
| | * 03160db (tag: F) F
| | |\
| | | * 9df28cb (tag: J) J
| | * 2afd329 (tag: I) I
| * a77cb1f (tag: E) E
* cd75703 (tag: D) D
|\
| * 3043d25 (tag: H) H
* 4ab0473 (tag: G) G
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
输出使您很难看到哪些提交处于同一级别,因此这是另一个演示文稿(其中“ A”是最新的提交,而较旧的提交在顶部):
git log --online --graph
(插图摘自What's the difference between HEAD^ and HEAD~ in Git?)。