Ссылаясь на предыдущую/следующую фиксацию в git?
Я видел, что команды git используют синтаксис, такой как HEAD~
, но я не смог найти этот синтаксис в git Справочное руководство.
Вот что я понял: <commit>~<n>
относится к шагам commit < n раньше, чем <commit> (где <n> - целочисленное число), а commit~
просто означает то же самое и что <n> неявно является одним.
Теперь, это правильно? В этом случае это всегда работает? Что делать, если <commit> является результатом слияния между двумя ветвями, в котором commit будет <commit>~
ссылаться? Есть ли какой-то соответствующий синтаксис для ссылки на следующие действия фиксации или фиксации <n> позже?
Ответы
Ответ 1
У вас есть очень четкое объяснение того, как это работает, в главе, посвященной ссылкам на Acenstry в Pro Git:
-
~
используется, чтобы получить первого родителя. -
^
можно использовать для получения других родителей (например, ^2
для слияния).
Но у вас нет простого способа сослаться на следующий коммит, даже если есть более запутанные способы его получения.
Ответ 2
Чтобы просто ответить на вопрос из заголовка (с тех пор, что меня достало от Google):
Чтобы проверить предыдущую фиксацию:
git checkout HEAD^
Чтобы проверить следующую фиксацию (если нет ветвления):
git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \ -f 2`
Ответ 3
Вдохновленный ответом @cexbrayat, я считаю полезным придумать это так:
Как ссылаться на что-то в предложении фиксации, где фиксация может иметь несколько родителей:
-
^n
указывает, какой родительский
-
~n
указывает, какая генерация
Оба значения по умолчанию равны.