Как получить теги на текущем коммите - PullRequest
47 голосов
/ 24 февраля 2010

У меня есть хранилище, в котором есть несколько тегов на одном коммите.Например:

commit #3 <--- TAG1 / TAG2 / TAG3

  |

commit #2 <--- TAG4/ TAG5

  |

commit #1 <--- TAG6/ TAG7

Я хотел бы узнать, какие теги относятся к конкретному коммиту.Например, если я проверю коммит 1, я бы хотел получить тег 6 и тег 7.

Я пытался:

git checkout <commit 1> 
git tag --contains

, в котором отображались теги 1-7.

git checkout <commit 1>
git describe --tags HEAD

отображается только тег 6.

Как правильно сделать это в Git?

Ответы [ 7 ]

94 голосов
/ 16 ноября 2015

Для завершения (благодаря ответу Сиро Сантили), у git-tag есть опция --points-at, которая делает именно то, что просит Шон.

git tag -l --points-at HEAD

Это также не дает возможности перечислять теги, добавленные в формит коммиты, как заявил Джонатан Хартли в своем комментарии к git-tag --contains.

23 голосов
/ 16 мая 2013

Полагаю, возможно, в git были добавлены некоторые опции с тех пор, как был задан этот вопрос, но, поскольку он все еще довольно популярен в Google, я решил добавить, что этот способ работает хорошо:

git tag -l --contains HEAD

Или замените HEAD любой другой верной ссылкой на коммит, которая вам нравится.

Это выведет список тегов, разделенных новой строкой, если HEAD содержит какие-либо теги, и ничего не напечатает иначе, поэтому вы получите:

TAG6
TAG7

И, конечно, есть много хороших способов с различными другими инструментами оболочки, которые вы можете отформатировать, когда у вас есть это ...

18 голосов
/ 24 февраля 2010

Некоторые улучшения в ответе Уильяма:

git config --global alias.tags 'log -n1 --pretty=format:%h%d'

Вывод выглядит так:

~$ git tags
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master)
~$ git tags HEAD~6
e923eae (tag: v1.7.0)
4 голосов
/ 25 августа 2014

Отображает идентификатор фиксации HEAD, а также любые ветви или любые теги, которые также оказываются точно в HEAD.

git reflog --decorate -1

Пример вывода:

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD
4 голосов
/ 24 февраля 2010

Это не идеально, но, возможно, полезно:

$ git log -n 1 --decorate --pretty=oneline

Вы можете поиграть с форматом, чтобы получить именно то, что вы хотите.

3 голосов
/ 23 апреля 2014

Вот уточнение ответа @ JoshLee, который управляет выводом, чтобы перечислять только теги (не ветви и не HEAD), и удаляет слово «tag:» и декоративную пунктуацию. Это полезно, если вы пишете сценарий для чего-то, что должно найти текущие теги (например, поместите их в ваше приглашение):

git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"

Пример вывода:

$ git log -n 1 --decorate=short
commit a9313...c7f2 (HEAD, tag: v1.0.1, tag: uat, mybranch)
...
$ git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g"
v1.0.1
uat
1 голос
/ 31 мая 2018

git tag --points-at

- баллы-на

Только перечислять теги данного объекта (HEAD, если не указан). Подразумевает --list.

из https://git -scm.com / docs / git-tag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...