Список тегов Git, отображение фиксации хэшей sha1
так git tag
команда перечисляет текущие теги git
tag1
tag2
git tag -n
печатает сообщение тега
tag1 blah blah
tag2 blah blah
каков наилучший способ получить хэш tag1 & tag2 ?
7 ответов:
The
git tag
команда недостаточно развита. В нем много желаемого, но отсутствует, например, полная информация о тегах и теги в порядке истории фиксации.мне нравится это, которое дает именно то, что я хочу, но не могу получить из
git tag
:git log --oneline --decorate --tags --no-walk
это дает очень хорошее цветовое представление тегов в обратном хронологическом порядке (как это было бы в полном журнале). Таким образом, вы не только видите теги, вы также увидите сокращенные хэши и фиксацию сообщения о фиксации тега.
Я дал ему псевдоним
git t
иgit tags
следующим образом:git config --global alias.tags "log --oneline --decorate --tags --no-walk" git config --global alias.t "!git tags"
Примечание: мне пришлось использовать перенаправление bash для
git t
поскольку Git не поддерживает вызов псевдонима из другого псевдонима (который является обломком).
если вы хотите увидеть дату и время фиксации, попробуйте:
git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
вы можете использовать другие форматы дат в
--date
опция, а также полностью контролировать выход, чтобы соответствовать вашему уникальному вкусу в . Оба варианта хорошо документированы в git-log Documentation.
аннотированные теги имеют свой собственный SHA-1, поэтому нам нужно разыменовать их. Однако легкие теги не могут быть разыменованы, так как они уже указывают на фиксацию. К решите, мы должны перечислить оба и отфильтровать объекты фиксации:
git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname) %(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit
результат с легкими тегами:
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9 e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8 19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7 7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6 62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
результат с аннотированными тегами:
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{} 1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{} 3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{} 1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{} 454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
у меня был аналогичный вопрос, но я хотел хэш (несколько) конкретных тегов. Я обнаружил, что "show-ref" будет принимать список тегов, так что это делает работу:
% git show-ref v3.4.0.13-ga v3.4.0.13-base bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base 79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
однако некоторые эксперименты с "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
Смотрите также хорошее резюме в как определить, какие точки фиксации тега в ГИТ?.
чтобы получить SHA1, на который ссылается какой-либо ref (ветвь, тег...) использовать
git rev-parse
:git rev-parse tag1^0 tag2^0
он будет печатать только полный SHA1s, на отдельных строках. Элемент
^0
суффикс-это специальный синтаксис, гарантирующий, что он будет печатать SHA1 фиксации, на которую указывает тег, независимо от того, аннотирован он или нет. (Аннотированные теги-это объекты сами по себе, которые содержат указатель на фиксацию вместе с метаданными. Если вы знаете, что тег аннотирован, и хотите, чтобы тег SHA1, просто оставьте прочь^0
.)конечно, вам не нужно часто делать это, так как любая команда Git, которая будет принимать SHA1, также должна принимать тег!
теги должны быть подписаны и/или переданный. Легкие теги не имеют объектов SHA1 и являются просто ссылками. В противном случае попробуйте
git show
.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
Это дает список всех коммитов для тегов. Аннотированные теги разыменованы. Отправить спасибо здесь.