我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
我在存储库中有一堆没有注释的标记,我想弄清楚它们指向哪个提交。是否有一个命令只列出标签和它们的提交sha ?检查标签和查看头部似乎有点太费力对我来说。
更新
在检查完响应后,我意识到我实际上想要的只是查看标记之前的历史记录,对于这一点git log <tagname>就足够了。
标记为answer的答案对于获取标记及其提交的列表很有用,这就是我所要求的。通过一点shell hack,我相信可以将这些转换为SHA+Commit消息。
当前回答
对于带注释的标记,git show-ref TAG显示标记的哈希值,而不是它所指向的提交的哈希值。
git show-ref——derefence TAG显示,另外,使用添加的^{}指向提交。
其他回答
这里没有显示文件名,但至少您可以了解存储库。
cat .git/refs/tags/*
该目录中的每个文件都包含一个指向提交的提交SHA。
这将得到当前的SHA1哈希值
简化提交哈希
git show <tag> --format="%h" --> 42e646e
提交哈希
git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280
所以我有一个发布文件夹的负载,这些文件夹可以从几个不同的回购点之一签出,可能是开发,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 log --decorate=full
它将显示在提交处结束/开始的分支,以及提交的标记。
来自Igor Zevaka:
总结
由于大约有4个几乎同样可接受但不同的答案,我将总结所有不同的方法来皮肤标签。
git rev-list -1 $TAG (answer). git rev-list outputs the commits that lead up to the $TAG similar to git log but only showing the SHA1 of the commit. The -1 limits the output to the commit it points at. git show-ref --tags (answer) will show all tags (local and fetched from remote) and their SHA1s. git show-ref $TAG (answer) will show the tag and its path along with the SHA1. git rev-parse $TAG (answer) will show the SHA1 of an unannotated tag. git rev-parse --verify $TAG^{commit} (answer) will show a SHA1 of both annotated and unannotated tags. On Windows use git rev-parse --verify %TAG%^^^^{commit} (four hats). cat .git/refs/tags/* or cat .git/packed-refs (answer) depending on whether or not the tag is local or fetched from remote.