В чем разница между HEAD ^ и HEAD ~ в Git? - PullRequest
623 голосов
/ 08 февраля 2010

Когда я указываю объект коммитов предка в Git, я путаюсь между HEAD^ и HEAD~.

Оба имеют «нумерованную» версию, такую ​​как HEAD^3 и HEAD~2.

Они кажутся мне очень похожими или одинаковыми, но есть ли различия между тильдой и каретой?

Ответы [ 13 ]

8 голосов
/ 08 февраля 2010
  • HEAD ~ указывает первого родителя в "ветви"

  • HEAD ^ позволяет выбрать конкретного родителя коммита

Пример:

Если вы хотите следовать боковой ветви, вам нужно указать что-то вроде

master~209^2~15
3 голосов
/ 04 августа 2018

фактический пример разницы между HEAD ~ и HEAD ^

HEAD^ VS HEAD~

0 голосов
/ 28 августа 2017

Проще говоря, для первого уровня происхождения (происхождение, наследование, происхождение и т. Д.) HEAD ^ и HEAD ~ оба указывают на один и тот же коммит, который (находится) на одного родителя выше HEAD (коммит).

Кроме того, ГОЛОВА ^ = ГОЛОВА ^ 1 = ГОЛОВА ~ = ГОЛОВА ~ 1. Но ГОЛОВА ^^! = ГОЛОВА ^ 2! = ГОЛОВА ~ 2. Еще ГОЛОВА ^^ = ГОЛОВА ~ 2. Читайте дальше.

Помимо первого уровня происхождения, все становится сложнее, особенно если с рабочей веткой / главной ветвью произошли слияния (из других ветвей). Существует также вопрос синтаксиса с кареткой, HEAD ^^ = HEAD ~ 2 (они эквивалентны), НО HEAD ^^! = HEAD ^ 2 (это совершенно разные вещи).

Каждый / символ каретки относится к первому родителю HEAD, поэтому символы, заключенные в строку, эквивалентны выражениям тильды, потому что они относятся к первым родителям первого родителя (первого родителя) и т. Д. И т. Д., Основываясь исключительно на количестве на связанных каретах или на числе после тильды (в любом случае они оба означают одно и то же), то есть остаются с первым родителем и идут вверх на x поколений.

HEAD ~ 2 (или HEAD ^^) относится к коммиту, который на два уровня выше / выше текущего коммита (HEAD) в иерархии, что означает коммит деда и дедушки HEAD.

HEAD ^ 2, с другой стороны, ссылается НЕ на коммит второго родителя первого родителя, а просто на коммит второго родителя. Это связано с тем, что символ каретки означает родителя коммита, а следующий за ним номер указывает, на какой / какой родительский коммит ссылается (первый родитель в случае, когда за кареткой не следует число [потому что это сокращение для номера). будучи 1, означая первого родителя]). В отличие от каретки, число, которое следует после, не подразумевает другого уровня иерархии вверх, а скорее означает, сколько уровней вбок, в иерархии, нужно найти правильного родителя (commit). В отличие от числа в выражении тильды, это только один родительский элемент в иерархии, независимо от числа (непосредственно), идущего за кареткой. Вместо восходящего, конечный номер каретки учитывается сбоку для родителей по всей иерархии [на уровне родителей вверх, что эквивалентно количеству последовательных карет].

Таким образом, HEAD ^ 3 равен третьему родительскому элементу коммита HEAD (НЕ пра-пра-прародителем, каковым будет HEAD ^^^ AND HEAD ~ 3 ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...