HEAD - це вказівник на поточну гілку. Я бачив різні позначення для предків HEAD, у тому числі
HEAD~2HEAD^2HEAD@{2}HEAD~~HEAD^^
Що саме означає кожне з перерахованого? Де документація для цього?
HEAD - це вказівник на поточну гілку. Я бачив різні позначення для предків HEAD, у тому числі
HEAD~2HEAD^2HEAD@{2}HEAD~~HEAD^^Що саме означає кожне з перерахованого? Де документація для цього?
git help revisions
Відповіді:
З документації тут .
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~0це те саме, що HEAD, як і слід було очікувати. Дещо заплутано, HEAD^0це те саме, що HEAD.
^ВИДАЄ, як дві гілки (внизу зліва та внизу праворуч), що об’єднуються в одну (вгорі)
суфікси посилань 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? ).