HEAD是当前分支的指针。我已经见过HEAD祖先的各种记号,包括
HEAD~2HEAD^2HEAD@{2}HEAD~~HEAD^^
上面的每一个到底是什么意思?该文件在哪里?
HEAD是当前分支的指针。我已经见过HEAD祖先的各种记号,包括
HEAD~2HEAD^2HEAD@{2}HEAD~~HEAD^^上面的每一个到底是什么意思?该文件在哪里?
git help revisions
Answers:
从这里的文档。
HEAD~2 :2提交早于HEADHEAD^2 :HEAD的第二个父级(如果HEAD是合并对象),否则是非法的HEAD@{2} :指的是第3个清单 git reflogHEAD~~ :2提交早于HEADHEAD^^ :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^
HEAD~0HEAD与您期望的相同。有点令人困惑,HEAD^0它也与相同HEAD。
^两个分支(在左下和右下)合并为一个(在上)
我数每个~或^表示“返回上一级”。如果在~(例如~n)旁边有一个数字,则n用作乘法器。如果在^(例如^n)旁边有一个数字,则n是要使用的第n个父对象(或从中的从左到右列位置的横向移动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
该git log --online --graph输出使得它很难看到其提交都在同一水平线上,所以这里是另一个演示文稿(其中“A”是最新的提交及以上的提交是在顶部):
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
(插图摘自Git中的HEAD ^和HEAD〜有什么区别?)。