Что означает символ каретки (^)?

Я видел ответ на вопрос здесь, который помогает восстановить удаленный файл в git.

Решение было

git checkout <deleting_commit>^ -- <deleted_file_path>

Что делает символ каретки (^)? Я видел его в другом месте, очень полезное в git. Его магический. Кто-то, пожалуйста, портите его мне и скажите, что он делает?

Ответ 1

HEAD^ означает первого родителя кончика текущей ветки.

Помните, что коммиты git могут иметь более одного родителя. HEAD^ - это сокращение от HEAD^1, и вы также можете обратиться к HEAD^2 и так далее в зависимости от ситуации.

Вы можете получить к родителям любой коммит, а не только HEAD. Вы также можете перемещаться назад через поколения: например, master~2 означает прародителя кончика основной ветки, отдавая предпочтение первому родителю в случаях неоднозначности. Эти спецификаторы могут быть связаны произвольно, например, topic~3^2. См. Связанный ответ на вопрос: В чем разница между HEAD^ и HEAD~ в Git?

Для получения полной информации см. Раздел "Указание ревизий" в git rev-parse --help.

Ответ 2

Это означает "parent of". Таким образом, HEAD^ означает "родительский элемент текущей HEAD". Вы можете даже объединить их: HEAD^^ означает "родительский элемент родителя текущего HEAD" (т.е. Бабушка дедушки текущего HEAD), HEAD^^^ означает "родительский элемент родителя родителя текущего HEAD" и т.д.

Ответ 3

^ (Каретка) также можно использовать при указании диапазонов.

Чтобы исключить коммиты, достижимые из коммита, используется префикс ^. Например, ^ r1 r2 означает коммиты, достижимые из r2, но исключая коммиты, достижимые из r1.

<оборотов>

Включите коммиты, которые достижимы от (т.е. предки).

^ <оборотов>

Исключить коммиты, которые достижимы от (т.е. предки).

Ответ 4

Каретка ссылается на родителя определенного коммита. Например. HEAD^ относится к родительскому элементу текущей записи HEAD. (также, HEAD^^ относится к бабушке и дедушке).

Ответ 5

Здесь наглядное объяснение. Предположим, у вас есть такая история:

                      master  
  ... <- B <- C <- D
             /
... <- E <- F
              feature

Когда объект был объединен с мастером, C был создан с двумя предками. Git назначает номера этих предков. Основному предку B назначается 1, а предку объекта F назначается 2.

Таким образом, C^1 относится к B и C^2 относится к F C^ является псевдонимом для C^1.

Вы бы только когда-либо использовали <rev>^3. если бы вы выполнили слияние трех ветвей.

Ответ 6

(^) получает родительский источник команды, то есть HEAD ^ получит родительский элемент HEAD.

Ответ 7

Карат представляет собой фиксацию фиксации (parent). Так, например, HEAD^ означает "одна фиксация из HEAD" и HEAD^^^ означает "три фиксации из HEAD".

Ответ 8

Грег Бэкон дал отличную ссылку, но он довольно плотный. Вводные документы Git в Интернете также включают спецификаторы пересмотра и дальности:

https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection