HEAD - это указатель на текущую ветку. Я видел множество обозначений для предков HEAD, включая
-
HEAD~2
-
HEAD^2
-
[email protected]{2}
-
HEAD~~
-
HEAD^^
Что означает каждое из указанных выше? Где документация для этого?
HEAD - это указатель на текущую ветку. Я видел множество обозначений для предков HEAD, включая
HEAD~2
HEAD^2
[email protected]{2}
HEAD~~
HEAD^^
Что означает каждое из указанных выше? Где документация для этого?
Из документов здесь.
HEAD~2
: 2 фиксирует старше чем HEADHEAD^2
: второй родитель HEAD, если HEAD было слиянием, иначе незаконно[email protected]{2}
: относится к 3-му списку в обзоре git reflog
HEAD~~
: 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^
справочные суффиксы git (^ N, ~ N, @{...})
ref~
является сокращением для ref~1
и означает фиксацию первого родителя. ref~2
означает фиксацию первого родителя первым родителем. ref~3
означает фиксацию первого родителя, первого родителя, первого родителя. И так далее.
ref^
является сокращением для ref^1
и означает фиксацию первого родителя. Но разница между ними заключается в том, что ref^2
означает коммит второго родителя (помните, что коммиты могут иметь двух родителей, когда они являются слиянием).
Операторы ^ и ~ могут быть объединены.
Вот диаграмма, показывающая, как ссылаться на различные коммиты, используя 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
(Иллюстрации взяты из разницы между HEAD ^ и HEAD ~ в Git?).