Как получить теги для текущей фиксации
У меня есть репозиторий, который имеет несколько тегов для одного и того же коммита. Например:
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?
Ответы
Ответ 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