Что означает символ каретки (^)?
Я видел ответ на вопрос здесь, который помогает восстановить удаленный файл в 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