Ответ 1
git должен быть способен идентифицировать фиксацию во время ряда общих операций
Существует несколько способов идентификации фиксации. Вы можете использовать ветку, тег, commit sha1 или выражения. Например:
git log HEAD
HEAD
в конечном итоге разрешает конкретную фиксацию, и вам будет предоставлен журнал для этого. Вы также можете сказать:
git log master
master
- это ветвь, которая также будет разрешена для конкретной фиксации.
git log fd72e9c99312
Теперь, когда это действительная фиксация.
Ниже приведена документация, которую вы ищете. Взято из документации команды git-rev-parse
в http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html.
УКАЗАНИЕ РЕВИЗИОНОВ
Параметр ревизии обычно, но необязательно, называет объект фиксации. Они используют так называемый расширенный синтаксис SHA1. Вот несколько способов задать имена объектов. Список, указанный в конце этого списка, - это имя деревьев и блоков, содержащихся в фиксации.
Полное имя объекта SHA1 (40-байтная шестнадцатеричная строка) или подстрока такого, которая уникальна в репозитории. Например. dae86e1950b1277e545cee180551750029cfe735 и dae86e оба называют один и тот же объект фиксации, если в вашем репозитории нет объекта, чье имя объекта начинается с dae86e.
Выход из git -describe; т.е. ближайший тег, необязательно сопровождаемый тире и числом коммитов, за которым следует тире, g и сокращенное имя объекта.
Символическое имя ссылки. Например. master обычно означает объект фиксации, на который ссылается $GIT_DIR/refs/heads/master. Если у вас есть обе головки/мастер и теги/мастер, вы можете прямо сказать головам/мастерам, чтобы сообщить git, что вы имеете в виду. При двусмысленности a устраняется неоднозначно, принимая первое совпадение в следующих правилах:
если существует $GIT_DIR/, это то, что вы имеете в виду (обычно это полезно только для HEAD, FETCH_HEAD, ORIG_HEAD и MERGE_HEAD);
в противном случае $GIT_DIR/refs/if существует;
в противном случае $GIT_DIR/refs/tags/if существует;
в противном случае $GIT_DIR/refs/heads/if существует;
в противном случае $GIT_DIR/refs/remotes/if exists;
иначе, $GIT_DIR/refs/remotes//HEAD, если существует.
HEAD называет фиксацию изменений в рабочем дереве. FETCH_HEAD записывает ветку, которую вы извлекли из удаленного репозитория, с помощью последнего вызова git -fetch. ORIG_HEAD создается командами, которые перемещают ваш HEAD резким способом, чтобы записать положение HEAD перед их работой, так что вы можете сменить кончик ветки обратно в состояние, прежде чем легко их запустить. MERGE_HEAD записывает фиксации, которые вы объединяете в свою ветку, когда вы запускаете git -merge.
Ссылка, за которой следует суффикс @с спецификацией даты, заключенной в пару скобок (например, {вчера}, {1 месяц 2 недели 3 дня 1 час 1 секунду назад} или {1979-02-26 18:30:00 }), чтобы указать значение ref в предыдущий момент времени. Этот суффикс может использоваться только сразу после имени ref, и ref должен иметь существующий журнал ($ GIT_DIR/logs/). Обратите внимание, что это просматривает состояние вашего локального ref в данный момент времени; например, то, что было на вашем местном филиале на прошлой неделе. Если вы хотите посмотреть на фиксации, сделанные в определенное время, см. --since и --until.
Ссылка, за которой следует суффикс @с порядковой спецификацией, заключенной в пару скобок (например, {1}, {15}), чтобы указать n-ое предыдущее значение этого ref. Например, master @{1} - это непосредственное предшествующее значение мастера, тогда как master @{5} является пятым предшествующим значением мастера. Этот суффикс может использоваться только сразу после имени ref, и ref должен иметь существующий журнал ($ GIT_DIR/logs/).
Вы можете использовать конструкцию @с пустой частью ref, чтобы получить в reflog текущей ветки. Например, если вы находитесь на ветке blabla, то @{1} означает то же, что и blabla @{1}.
Специальный конструкт @{-} означает, что ветвь проверена до текущей.
Суффикс ^ к параметру ревизии означает первый родитель этого объекта фиксации. ^ означает, что th родитель (т.е. rev ^ эквивалентен rev ^ 1). В качестве специального правила rev ^ 0 означает само коммит и используется, когда rev - это имя объекта объекта тега, относящегося к объекту фиксации.
Суффикс ~ к параметру ревизии означает объект фиксации, который является родоначальником th поколения именованного объекта commit, после только первого родителя. То есть rev ~ 3 эквивалентно rev ^^^, что эквивалентно rev ^ 1 ^ 1 ^ 1. Ниже приведен пример использования этой формы.
Суффикс ^, за которым следует имя типа объекта, заключенное в пару фигурных скобок (например, v0.99.8 ^ {commit}), означает, что объект может быть тегом и разыменовать тег рекурсивно до тех пор, пока не будет найден объект этого типа или объект больше не могут быть разыменованы (в этом случае barf). rev ^ 0, введенный ранее, является короткой для rev ^ {commit}.
Суффикс ^, за которым следует пустая пара скобок (например, v0.99.8 ^ {}), означает, что объект может быть тегом, и разыгрывать тег рекурсивно до тех пор, пока не будет найден объект без тегов.
Двоеточие, за которым следует косая черта, а затем текст: это имя коммит, чье сообщение фиксации начинается с указанного текста. Это имя возвращает самую младшую совпадающую фиксацию, доступную из любого ref. Если сообщение фиксации начинается с символа!, Вы должны повторить это; специальная последовательность:/!, за которой следует что-то еще! зарезервировано на данный момент.
Суффикс: за ним следует путь; это называет blob или дерево по заданному пути в древовидном объекте, названном частью перед двоеточием.
Двоеточие, необязательно сопровождаемое номером этапа (от 0 до 3) и двоеточием, за которым следует путь; это называет объект blob в индексе на указанном пути. Отсутствующий номер этапа (и двоеточие, который следует за ним) называет запись этапа 0. Во время слияния этап 1 является общим предком, второй этап - версией целевой ветки (как правило, текущей ветвью), а этап 3 - это версия из ветки, которая объединяется.
Вот иллюстрация, сделанная Джоном Лолигером. Оба узла фиксации B и C являются родителями commit node A. Родительские коммиты упорядочены слева направо.
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = A^2 = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2