Как узнать, на какой коммит указывает тег в Git? - PullRequest
365 голосов
/ 07 декабря 2009

У меня есть куча аннотированных тегов в репозитории, и я хочу выяснить, на какой коммит они указывают. Есть ли команда, которая будет просто перечислять теги и их коммиты SHA? Проверка метки и взгляд на ГОЛОВУ кажутся мне слишком трудоемкими.

Обновление

После ответов я понял, что на самом деле я просто хотел посмотреть на историю, ведущую к тегу, для которой достаточно git log <tagname>.

Ответ, помеченный как ответ, полезен для получения списка тегов и их коммитов, о чем я и просил. Я уверен, что с помощью небольшого количества хакерских атак их можно преобразовать в сообщение SHA + Commit.

Ответы [ 18 ]

296 голосов
/ 07 декабря 2009

Один из способов сделать это будет с git rev-list. Следующее выведет коммит, на который указывает тег:

$ git rev-list -n 1 $TAG

Вы можете добавить его как псевдоним в ~/.gitconfig, если вы часто его используете:

[alias]
  tagcommit = rev-list -n 1

А затем назовите его с помощью:

$ git tagcommit $TAG
216 голосов
/ 08 декабря 2009
git show-ref --tags

Например, git show-ref --abbrev=7 --tags покажет вам что-то вроде следующего:

f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2
94 голосов
/ 28 июля 2014

Просто используйте git show <tag>

Однако, он также сбрасывает коммиты diff. Чтобы пропустить эти различия, используйте git log -1 <tag>. (Спасибо @DolphinDream и @demisx!)

37 голосов
/ 24 августа 2010

В моем репозитории git show-ref TAG показывает хэш тега, а не хеш коммита, на который он указывает.

git show-ref --dereference TAG дополнительно показывает коммит, на который указывает.

32 голосов
/ 28 июня 2014

С Игорь Зевака :

Краткое описание

Поскольку существует около 4 почти одинаково приемлемых, но разных ответов, я кратко изложу все различные способы оформления тега.

  1. git rev-list -1 $TAG ( ответ ). git rev-list выводит коммиты, которые приводят к $TAG, аналогичному git log, но показывают только SHA1 коммита. -1 ограничивает вывод коммитом, на который он указывает.

  2. git show-ref --tags ( ответ ) покажет все теги (локальные и извлеченные с удаленного устройства) и их SHA1.

  3. git show-ref $TAG ( answer ) покажет тег и его путь вместе с SHA1.

  4. git rev-parse $TAG ( ответ ) покажет SHA1 аннотированного тега.

  5. git rev-parse --verify $TAG^{commit} ( ответ ) покажет SHA1 как аннотированных, так и аннотированных тегов. В Windows используйте git rev-parse --verify %TAG%^^^^{commit} (четыре шляпы).

  6. cat .git/refs/tags/* или cat .git/packed-refs ( ответ ) в зависимости от того, является ли тег локальным или извлеченным с удаленного компьютера.

32 голосов
/ 08 декабря 2009

Используйте

git rev-parse --verify <tag>^{commit}

(который возвращает SHA-1 коммита даже для аннотированного тега).


git show-ref <tag> также будет работать, если <tag> не аннотирован. И всегда есть git for-each-ref (подробности см. В документации).

15 голосов
/ 28 июня 2014

Как насчет этого:

git log -1 $TAGNAME

ИЛИ

git log -1 origin/$TAGNAME
10 голосов
/ 16 октября 2013

Чтобы получить sha / хэш коммита, на который ссылается тег (не sha тега):

git rev-list -1 <tag>

7 голосов
/ 04 ноября 2016

Несмотря на то, что это довольно старая версия, я подумал, что хотел бы отметить интересную функцию, которую я только что нашел для перечисления тегов с коммитами:

git log --decorate=full

Он покажет ветви, которые заканчиваются / начинаются при коммите, и теги для коммитов.

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

Мне бы тоже хотелось узнать «правильный» путь, но пока вы можете сделать это:

git show mytag | head -1    
...