Ответ 1
git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'
должен работать как для легких, так и для аннотированных тегов.
Я видел команды git describe
и git-name-rev
, но мне не удалось заставить их перечислить несколько тегов.
Пример: у меня есть sha1 48eb354, и я знаю, что теги A и B указывают на него. Поэтому я хочу, чтобы команда git git {something} 48eb354
выдавала результат, похожий на "A, B". Мне не интересно знать ссылки, относящиеся к другим тегам или ветвям, только точные соответствия для тегов.
git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'
должен работать как для легких, так и для аннотированных тегов.
git tag --points-at HEAD
Показывает все теги в HEAD, вы также можете заменить HEAD любым идентификатором sha1.
Вы можете использовать:
git tag --contains <commit>
который показывает все теги при определенной фиксации. Его можно использовать вместо:
git tag --points-at HEAD
доступный только из 1.7.10.
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
grep ^$commit_id |
cut -d' ' -f2
Жаль, что это невозможно сделать легче. Другой флаг в git tag
для включения идентификаторов фиксации может выражать это обращение git for-each-ref
естественно.
Следующая команда выполняет задание, но напрямую анализирует содержимое каталога .git и, таким образом, может разорваться, если формат репозитория git изменяется.
grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'