Я не собираюсь задавать этот вопрос отдельно, но мне интересно, почему git tag( -nили какой-то другой вариант ...) вообще не показывает хэши коммитов. Приятно видеть, какие решения придумывают люди, но я считаю это недостатком дизайна в доступных вариантах.
andreee
Ответы:
145
Чтобы получить теги git с хешем SHA1 объекта Tag, вы можете запустить:
Обратите внимание, что это не повлияет на различия между легкими и аннотированными тегами. Для легких тегов он покажет фиксацию, а для аннотированных тегов он покажет хеш самого объекта тега.
Лили Баллард,
20
Для отображения списка тегов с разыменованными ссылками (в случае аннотированных тегов) используйте git show-ref --tags -d. Разыменованные теги имеют после себя ^{}.
S. Christoffer Eliesen
51
Команда git tagнедоразвита. Многое нужно, но в ней не хватает, например, полная информация о тегах и теги в порядке истории коммитов.
Вместо этого мне нравится это, что дает именно то, что я хочу, но не могу получить от git tag:
git log --oneline --decorate --tags --no-walk
Это дает очень красивый цветной вид тегов в обратном хронологическом порядке (как в полном журнале). Таким образом, вы увидите не только теги, но и сокращенные хэши и сообщения о фиксации тега.
Я назвал это псевдонимом git tи git tagsследующим образом:
Примечание: мне пришлось использовать перенаправление bash, git tпоскольку Git не поддерживает вызов псевдонима из другого псевдонима (что является обломом).
Если вы хотите увидеть дату и время фиксации, попробуйте:
Вы можете использовать другие форматы даты в --dateопции, а также полностью контролировать вывод, чтобы соответствовать вашему уникальному вкусу в --prettyопции. Оба варианта хорошо задокументированы в документации git-log .
Хотя это не то, что запрашивал OP (отображение хэшей sha1 фиксации ), это очень полезно, поскольку сообщения фиксации также могут быть удобны. +1 от меня.
Стелиос Адамантидис
2
@nealmcb git logмощный! Вы можете заставить его показать именно то , что вы хотите. Попробуй git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. Также возможны другие форматы даты. Просто загляните --dateна страницу справки. Я обновил свой ответ, включив в него эту опцию.
ADTC
1
@SteliosAdamantidis На самом деле мой ответ дает сокращенные хэши SHA1 (первые 7 символов), и если вам нужны полные хэши, вы всегда можете изменить их с помощью --prettyи %H. Спасибо за +1 :)
ADTC
15
Аннотированные теги имеют собственный SHA-1, поэтому нам нужно разыменовать их. Однако легковесные теги нельзя разыменовать, поскольку они уже указывают на фиксацию. Чтобы решить эту проблему, мы должны перечислить оба и отфильтровать объекты фиксации:
Использование git log --tags --oneline --no-walkтакже автоматически отразит аннотированные теги. :)
ADTC
11
Чтобы получить SHA1, на который ссылается какая-либо ссылка (ветвь, тег ...), используйте git rev-parse:
git rev-parse tag1^0 tag2^0
Он будет печатать только полные SHA1 в отдельных строках. ^0Суффикс специальный синтаксис, чтобы убедиться , что это будет печатать SHA1 коммита , на который указывает тег, будь то аннотированный или нет. (Аннотированные теги - это сами по себе объекты, которые содержат указатель на фиксацию вместе с метаданными. Если вы знаете, что тег аннотирован, и хотите использовать SHA1 тега, просто оставьте его ^0.)
Конечно, вам не нужно часто это делать, так как любая команда Git, которая принимает SHA1, также должна принимать тег!
Лучший ответ здесь, спасибо @Jefromi. Обратите внимание, что в оболочке Windows cmd любая команда git, использующая ^, должна быть заключена в кавычки: например, git rev-parse "tag1 ^ 0" "tag2 ^ 0".
йойо
8
У меня был аналогичный вопрос, но я хотел получить хеш (нескольких) конкретных тегов. Я обнаружил, что "show-ref" принимает список тегов, так что это работает:
Однако некоторые эксперименты с "git show" привели к этой команде:
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
Так как я гораздо больше знаком с использованием «show», чем «show-ref», я считаю, что последнее легче запомнить и более полезно.
Теги должны быть подписаны и / или отправлены сообщения. Легкие теги не имеют объектов SHA1 и являются просто ссылками. В противном случае попробуйте git show.
Отличное решение. Если вы хотите иметь только имена тегов вместо полного имени ссылки, вы можете изменить использование %(refname:short)вместо %(refname).
Radon8472
2
Я взял команду из сообщения anatoly techtonik, добавил заголовок сообщения тегов / коммитов и отформатировал его в виде красивых столбцов.
Результат будет идентичным, git tag -nно с префиксом commit-hash.
git tag
(-n
или какой-то другой вариант ...) вообще не показывает хэши коммитов. Приятно видеть, какие решения придумывают люди, но я считаю это недостатком дизайна в доступных вариантах.Ответы:
Чтобы получить теги git с хешем SHA1 объекта Tag, вы можете запустить:
Результат будет выглядеть примерно так:
Каждая строка - это хэш SHA1 тега, за которым следует имя тега с префиксом
refs/tags/
.Если вам нужен хэш SHA1 фиксации вместо объекта тега, вы можете запустить:
Это даст следующий результат:
Строки, заканчивающиеся на,
^{}
начинаются с хэша SHA1 фактического коммита, на который указывает тег.источник
git show-ref --tags -d
. Разыменованные теги имеют после себя^{}
.Команда
git tag
недоразвита. Многое нужно, но в ней не хватает, например, полная информация о тегах и теги в порядке истории коммитов.Вместо этого мне нравится это, что дает именно то, что я хочу, но не могу получить от
git tag
:Это дает очень красивый цветной вид тегов в обратном хронологическом порядке (как в полном журнале). Таким образом, вы увидите не только теги, но и сокращенные хэши и сообщения о фиксации тега.
Я назвал это псевдонимом
git t
иgit tags
следующим образом:Примечание: мне пришлось использовать перенаправление bash,
git t
поскольку Git не поддерживает вызов псевдонима из другого псевдонима (что является обломом).Если вы хотите увидеть дату и время фиксации, попробуйте:
Вы можете использовать другие форматы даты в
--date
опции, а также полностью контролировать вывод, чтобы соответствовать вашему уникальному вкусу в--pretty
опции. Оба варианта хорошо задокументированы в документации git-log .источник
git log
мощный! Вы можете заставить его показать именно то , что вы хотите. Попробуйgit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. Также возможны другие форматы даты. Просто загляните--date
на страницу справки. Я обновил свой ответ, включив в него эту опцию.--pretty
и%H
. Спасибо за +1 :)Аннотированные теги имеют собственный SHA-1, поэтому нам нужно разыменовать их. Однако легковесные теги нельзя разыменовать, поскольку они уже указывают на фиксацию. Чтобы решить эту проблему, мы должны перечислить оба и отфильтровать объекты фиксации:
Результат с легкими тегами:
Результат с аннотированными тегами:
источник
git log --tags --oneline --no-walk
также автоматически отразит аннотированные теги. :)Чтобы получить SHA1, на который ссылается какая-либо ссылка (ветвь, тег ...), используйте
git rev-parse
:Он будет печатать только полные SHA1 в отдельных строках.
^0
Суффикс специальный синтаксис, чтобы убедиться , что это будет печатать SHA1 коммита , на который указывает тег, будь то аннотированный или нет. (Аннотированные теги - это сами по себе объекты, которые содержат указатель на фиксацию вместе с метаданными. Если вы знаете, что тег аннотирован, и хотите использовать SHA1 тега, просто оставьте его^0
.)Конечно, вам не нужно часто это делать, так как любая команда Git, которая принимает SHA1, также должна принимать тег!
источник
У меня был аналогичный вопрос, но я хотел получить хеш (нескольких) конкретных тегов. Я обнаружил, что "show-ref" принимает список тегов, так что это работает:
Однако некоторые эксперименты с "git show" привели к этой команде:
Так как я гораздо больше знаком с использованием «show», чем «show-ref», я считаю, что последнее легче запомнить и более полезно.
См. Также красивое резюме в статье Как узнать, на какой коммит указывает тег в Git? .
источник
Теги должны быть подписаны и / или отправлены сообщения. Легкие теги не имеют объектов SHA1 и являются просто ссылками. В противном случае попробуйте
git show
.источник
Это дает список всех коммитов для тегов. Аннотированные теги разыменовываются. Отправьте сюда спасибо .
источник
%(refname:short)
вместо%(refname)
.Я взял команду из сообщения anatoly techtonik, добавил заголовок сообщения тегов / коммитов и отформатировал его в виде красивых столбцов.
Результат будет идентичным,
git tag -n
но с префиксом commit-hash.Если вы хотите использовать длинный хэш вместо короткого, просто замените его
objectname:short
наobjectname
.источник