Ссылаясь на предыдущую/следующую фиксацию в 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 указывает, какая генерация

Оба значения по умолчанию равны.