Существует несколько способов сослаться на определенный коммит или дерево, несколько иных чем набор полного 40-значного sha значения. В Git, на них ссылаются как на 'treeish'.
Если sha-значение вашего коммита '980e3ccdaac54a0d4de358f3fe5d718027d96aae
', git узнает его по любому из следующих идентификаторов:
980e3ccdaac54a0d4de358f3fe5d718027d96aae
980e3ccdaac54a0d4
980e3cc
Пока частичное sha-значение уникально - git не спутает его с другим (что весьма маловероятно если вы используете по крайней мере 5 символов), git дополнит частичное sha значение для вас.
Вы всегда можете использовать имя ветки, тага или удаленки вместо sha значения, так как они просто указатели. Если ваша ветка master на коммите 980e3 и вы только что выполнили ее push в ветку origin и поставили таг 'v1.0', то все следующие указатели эквивалентны:
980e3ccdaac54a0d4de358f3fe5d718027d96aae
origin/master
refs/remotes/origin/master
master
refs/heads/master
v1.0
refs/tags/v1.0
Это означает содержимое вывода след.команд будет одинаковым:
$ git log master
$ git log refs/tags/v1.0
Журнал ссылок (The Ref Log) который ведет git позволяет вам проделывать некоторые похожие вещи локально, например такие как:
master@{yesterday}
master@{1 month ago}
Это сокращение для 'туда где голова ветки master была вчера', и т.д. Заметьте что в этом формате результатом может быть разные sha значения на разных компьютерах, даже если ветка master в данный момент указывает на одно место.
Этот формат выдаст вам N-ое предыдущее значение определенной ссылки. Например:
master@{5}
выдаст вам 5-ое предшествующее значение ссылки головы ветки master.
Это выдаст N-ого родителя определенного коммита. Этот формат полезен только в случае слияния коммитов - объекты коммит которые имеют более одного прямого родителя.
master^2
Спека тильда выдаст вам N-ого прародителя объекта коммита. Например,
master~2
наш результат первый родитель первого родителя коммита на который указывает master. Это эквивалентно:
master^^
Вы также можете продолжать это. След. спеки укажут на тот же самый коммит:
master^^^^^^
master~3^~2
master~6
Этот неоднозначный коммит из дерева на которое он указывает. Если вы хотите sha значение на которое указывает этот коммит, вы можете добавить '{tree}' спеку в его конец.
master^{tree}
Если вы желаете получить sha значение определенного блоба, то вы можете добавить путь блоба к концу treeish, след.образом:
master:/path/to/file
В заключении, вы можете определить интервал коммитов с помощью спеки интервал. Это даст вам все коммиты между 7b593b5 и 51bea1 (где 51bea1 наиболее свежий), исключая 7b593b5 но включая 51bea1:
7b593b5..51bea1
Это включит каждый коммит начиная с 7b593b:
7b593b..