У меня есть куча аннотированных тегов в хранилище, и я хочу выяснить, на какой коммит они указывают. Есть ли команда, которая будет просто перечислять теги и их коммиты SHA? Проверка метки и взгляд на ГОЛОВУ кажутся мне слишком трудоемкими.
Обновить
После того, как я прочитал ответы, я понял, что на самом деле я просто хотел посмотреть на историю, ведущую к тегу, для чего git log <tagname>
достаточно.
Ответ, помеченный как ответ, полезен для получения списка тегов и их коммитов, о чем я и просил. Я уверен, что с помощью небольшого количества хакерских оболочек их можно преобразовать в сообщение SHA + Commit.
git show-ref
показывает ша тега, а не ревизии репо. $ git show-ref test 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / test $ git checkout test HEAD теперь находится на c7f8831 ... $ git checkout 08b9c77 HEAD сейчас на c7f8831 ...--dereference
Ответы:
Один из способов сделать это будет с
git rev-list
. Следующее выведет коммит, на который указывает тег:Вы можете добавить его как псевдоним,
~/.gitconfig
если вы часто его используете:А затем позвоните с помощью:
источник
git rev-parse <tag>
? Илиgit rev-list -1 <tag>
?git rev-parse $TAG
возвращает SHA1 объекта тега, а не коммит, на который он указывает.git rev-list -1
работает, хотя.git rev-parse $TAG^{commit}
илиgit rev-parse $TAG^{}
разыменовать аннотированный / подписанный тегgit rev-list $TAG --max-count=1
git tag -a
илиgit tag -s
, тоgit rev-parse <tag>
вы получите SHA-1 самого объекта тега , аgit rev-list -1 <tag>
SHA-1 коммита (ревизии), на который он указывает, так же, какgit rev-parse <tag>^{commit}
. НТН.Например,
git show-ref --abbrev=7 --tags
покажет вам что-то вроде следующего:источник
.git/packed-refs
или.git/refs/tags/*
git tag --verbose
показывать их тоже?-d
флаг, чтобы получить указанный коммит (во второй строке).git show-ref
эти два тега ведут себя по-разному, не является очевидным или общеизвестным.Просто используйте
git show <tag>
Тем не менее, он также сбрасывает коммиты diff. Чтобы пропустить эти различия, используйте
git log -1 <tag>
. (Спасибо @DolphinDream и @demisx!)источник
git show <tag>
показывает разницу, а не фиксацию, на которую указывает тег.git show
на экран выводится гораздо больше материала, которого там не должно быть. Это скрывает фактический хеш коммита, который каждый ищет. Лучшая команда,git log -1 [tag-name]
или,git log -1 --pretty=oneline [tag-name]
если вы хотите oneliners.В моем хранилище
git show-ref TAG
показывает хэш тега, а не хеш коммита, на который он указывает.git show-ref --dereference TAG
дополнительно показывает коммит, на который указываетисточник
От Игоря Зевака :
Резюме
Поскольку существует около 4 почти одинаково приемлемых, но разных ответов, я кратко изложу все различные способы оформления тега.
git rev-list -1 $TAG
( ответ ).git rev-list
выводит коммиты, которые приводят к$TAG
аналогу,git log
но показывают только SHA1 коммита.-1
Ограничивает выход к фиксации он указывает на.git show-ref --tags
( ответ ) покажет все теги (локальные и извлеченные из удаленного) и их SHA1.git show-ref $TAG
( ответ ) покажет тег и его путь вместе с SHA1.git rev-parse $TAG
( ответ ) покажет SHA1 аннотированного тега.git rev-parse --verify $TAG^{commit}
( ответ ) покажет SHA1 как аннотированных, так и аннотированных тегов. На Windows используетсяgit rev-parse --verify %TAG%^^^^{commit}
(четыре шляпы).cat .git/refs/tags/*
илиcat .git/packed-refs
( ответ ) в зависимости от того, является ли тег локальным или получен с удаленного компьютера.источник
использование
(который возвращает SHA-1 коммита даже для аннотированного тега).
git show-ref <tag>
также будет работать, если<tag>
не аннотировано. И всегда естьgit for-each-ref
(см. Документацию для деталей).источник
git rev-parse <tag>~0
который также, кажется, работает, и не требует специального экранирования в Windows (для которого необходимы четыре шляпы (^) вместо одной). Суффикс~<number>
дает <номер> родительский коммит, поэтому~0
выдает сам коммит. Кстати,^0
также является допустимым сокращением для^{commit}
суффикса ревизии.Как насчет этого:
ИЛИ
источник
Чтобы получить sha / hash коммита, на который ссылается тег (а не sha тега):
git rev-list -1 <tag>
источник
Я также хотел бы знать «правильный» путь, но пока вы можете сделать это:
источник
git show --oneline mytag | head -1
Несмотря на то, что это довольно старая версия, я подумал, что хотел бы отметить интересную функцию, которую я только что нашел для перечисления тегов с коммитами:
Он покажет ветви, которые заканчиваются / начинаются при фиксации, и теги для фиксации.
источник
Вы также можете получить более понятную картину того, где теги указывают на использование
и затем выделите тег, который вы ищете через
/
.Более компактный вид (
--pretty=oneline
) плюс все головы (-a
) также могут помочь:Выглядит немного пугающе, но также может быть добавлен псевдоним в
~/.gitconfig
случае необходимости.источник
Короткий ответ после Git-2
Я знаю, что этот вопрос был здесь давно. И ответ от CB Bailey на 100% правильный:
git show-ref --tags --abbrev
Мне больше нравится этот, так как он использует
git tag
:Просто. Короткий.
PS псевдоним это как
git taglist
с этой командой:источник
Из списка рассылки git вы можете получить список хэшей коммитов для тегов с автоматической разыменовкой для аннотированных тегов:
источник
Это не показывает имена файлов, но, по крайней мере, вы получите представление о хранилище.
Каждый файл в этом каталоге содержит коммит SHA, указывающий на коммит.
источник
.git/packed-refs
все же работал.Я также хотел бы знать правильный путь , но вы всегда можете заглянуть в:
или:
источник
git rev-list
.Это даст вам текущий хэш SHA1
Сокращенный коммит хеш
Совершить хэш
источник
git log <tag> -n 1 --pretty=%H
работаетЕсли вы хотите увидеть подробную информацию о теге SOMETAG (tagger, date и т. Д.), Хеш коммита, на который он указывает, и немного информации о коммите, но без полной разницы, попробуйте
Пример вывода:
источник
Таким образом, у меня есть множество папок релиза, где эти папки могут быть извлечены из одного из нескольких различных репозиториев, и могут быть dev, qa или master ветками или могут быть производственными выпусками, извлечены из тега, и тег может быть аннотированный или нет. У меня есть скрипт, который будет смотреть на целевую папку и получать ответ в форме -. Проблема в том, что разные версии git возвращают разные статусы для проверки тегов.
Так что я обнаружил, что
git show-ref --tags
работал изначально, за исключением аннотированных тегов. Однако добавление -d добавило отдельную запись в список тегов, один для тега, другой для аннотации (коммит аннотации был идентифицирован как ^ {}, который я удалил с помощью sed).Так что это ядро моего сценария для тех, кто хочет:
источник
Можно использовать ниже, Это даст хеш коммита
git show -s --format=%H <tag>^{commit}
Если требуется сокращенный хеш коммита,
git show -s --format=%h <tag>^{commit}
источник