Подтвердить что ты не робот

Как получить теги для текущей фиксации

У меня есть репозиторий, который имеет несколько тегов для одного и того же коммита. Например:

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

  |

commit #2 <--- TAG4/ TAG5

  |

commit #1 <--- TAG6/ TAG7

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

Я пробовал:

git checkout <commit 1> 
git tag --contains

который отображает теги 1-7.

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

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

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

4b9b3361

Ответ 1

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

git tag -l --points-at HEAD

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

Ответ 2

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

git tag -l --contains HEAD

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

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

TAG6
TAG7

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

Ответ 3

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

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

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

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

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

Ответ 5

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

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

Ответ 6

Здесь отображается идентификатор фиксации HEAD, а также любые ветки или теги, которые также находятся в HEAD.

git reflog --decorate -1

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

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) [email protected]{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD