Что означает символ вставки (^)? - PullRequest
104 голосов
/ 24 декабря 2009

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

Решение было

git checkout <deleting_commit>^ -- <deleted_file_path>

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

Ответы [ 8 ]

117 голосов
/ 24 декабря 2009

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

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

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

Подробнее см. В разделе «Указание редакций» в разделе git rev-parse --help.

20 голосов
/ 24 декабря 2009

Это означает «родитель». Таким образом, HEAD^ означает «родитель текущего HEAD». Вы даже можете связать их вместе: HEAD^^ означает «родитель родителя текущего HEAD» (т. Е. Прародитель текущего HEAD), HEAD^^^ означает «родитель родителя родителя текущего HEAD "и пр.

12 голосов
/ 05 марта 2016

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

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

Включает коммиты, которые доступны от (то есть предков).

^

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

7 голосов
/ 24 декабря 2009

Каретка относится к родителю определенного коммита. Например. HEAD^ относится к родителю текущего коммита HEAD. (также HEAD^^ относится к прародителю).

6 голосов
/ 21 января 2017

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

               master  

   A <- B <- C <- D
           /
     E <- F
            feature

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

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

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

4 голосов
/ 24 декабря 2009

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

3 голосов
/ 24 декабря 2009

Карат представляет смещение фиксации (родитель). Так, например, HEAD^ означает «один коммит из HEAD», а HEAD^^^ означает «три коммита из HEAD».

1 голос
/ 30 ноября 2012

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

https://git -scm.com / книга / ен / v2 / GIT-Tools-Revision-Selection

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