我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。

更新

在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。

标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。


当前回答

简短的后git -2回答

我知道这个问题已经提出很久了。CB Bailey的答案是100%正确的:git show-ref——tags——abbrev

我更喜欢这个,因为它使用了git标签:

git tag --list --format '%(refname:short) %(objectname:short)'

简单。短。

PS用这个命令将它别名为git标签列表:

git config --global alias.taglist "tag --list --format '%(refname:short) %(objectname:short)'"

其他回答

尽管这已经很老了,但我想指出我刚刚发现的一个很酷的功能,用于列出带有提交的标记:

git log --decorate=full

它将显示在提交处结束/开始的分支,以及提交的标记。

所以我有一个发布文件夹的负载,这些文件夹可以从几个不同的回购点之一签出,可能是开发,qa或主分支,也可能是生产版本,从一个标签签出,标签可能带注释,也可能没有。我有一个脚本,将查看目标文件夹,并在窗体返回答案-。问题是不同版本的git返回不同的标签签出状态。

所以我发现git show-ref——tags最初工作,除了带注释的标签。然而,添加-d将一个单独的条目添加到标记列表中,一个用于标记,另一个用于注释(注释提交被标识为^{},我用sed去掉了它)。

所以这是我剧本的核心,对于任何想要它的人:-

REPO=`git --git-dir=${TARGET} remote show origin -n | \
         grep "Fetch URL:" | \
         sed -E "s/^.*\/(.*)$/\1/" | \
         sed "s/.git$//"`

TAG=`git --git-dir=${TARGET} show-ref -d --tags | \
         grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
         cut -d\  -f2 | \
         cut -d/ -f3 | \
         sed "s/\^{}$//"`

if [ "${TAG}" == "" ] ; then 
  BRANCH=`git --git-dir=${TARGET} show-ref --heads | \
         grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
         cut -d\  -f2 | \
         cut -d/ -f3`
  TAG=${BRANCH}
fi

从git邮件列表中,可以通过自动对带注释的标签解引用来获得标签的提交哈希列表:

git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags

如果您想查看标记SOMETAG(标记器,日期等)的详细信息,它所指向的提交的哈希值和一些关于提交的信息,但没有完整的差异,请尝试

git show --name-status SOMETAG

示例输出:

tag SOMETAG
Tagger: ....
Date:   Thu Jan 26 17:40:53 2017 +0100

 .... tag message .......

commit 9f00ce27c924c7e972e96be7392918b826a3fad9
Author: .............
Date:   Thu Jan 26 17:38:35 2017 +0100

 .... commit message .......

..... list of changed files with their change-status (like git log --name-status) .....

警告:这只适用于Unannotated标签,因此,它是更安全的使用已接受的答案,在一般情况下工作https://stackoverflow.com/a/1862542/1586965

git show-ref --tags

例如,git show-ref——abbrev=7——tags会显示如下内容:

f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2