当前位置:  开发笔记 > 编程语言 > 正文

如何判断标签在Git中指向哪个提交?

如何解决《如何判断标签在Git中指向哪个提交?》经验,为你挑选了10个好方法。

我在存储库中有一堆未注释的标记,我想知道它们指向哪个提交.是否有一个命令只列出标签及其提交SHA?检查标签并查看HEAD对我来说似乎有点过于费力.

更新

我在通过回复之后意识到,我真正想要的只是简单地看一下导致标签的历史,这就git log 足够了.

标记为答案的答案对于获取标签及其提交列表很有用,这就是我的要求.有一点shell hackery我敢肯定可以将它们转换为SHA + Commit消息.



1> mipadi..:

一种方法是做到这一点git rev-list.以下将输出标记指向的提交:

$ git rev-list -n 1 $TAG

~/.gitconfig如果您经常使用它,可以将其添加为别名:

[alias]
  tagcommit = rev-list -n 1

然后调用它:

$ git tagcommit $TAG


@ Jakub:`git rev-parse $ TAG`返回标记对象的SHA1,而不是它指向的提交.但是,`git rev-list -1`是有效的.
为什么不使用`git rev-parse `?或者`git rev-list -1 `?
@mipadi:对于**未注释的**标签,它无关紧要; 对于带注释的标签,您可以使用`git rev-parse $ TAG ^ {commit}`或`git rev-parse $ TAG ^ {}`来取消引用带注释/签名的标签
出于兴趣,这与`git show $ TAG'有什么不同?
您可以使用:`git rev-list $ TAG --max-count = 1`
@RobinHsu:如果你有***注释的***标签,用`git tag -a`或`git tag -s`创建,那么`git rev-parse `会给你SHA-1一个*标签对象*本身,而`git rev-list -1 `会给它指向的*commit*(修订版)的SHA-1,与`git rev-parse ^ {commit}相同.HTH.

2> CB Bailey..:
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


这将显示标记本身的引用,而不是标记指向的提交.您需要添加`-d`标志以获取引用的提交(在第二行).
这有效,虽然我想知道让`git tag --verbose`显示它们是不是有意义?
嗯.它在我的存储库中有奇怪的行为:git tag -a v0.1.1-alpha a9dcc1f24cacde535523bddc22f4c69467428550; git show-ref --tags - > b784145a9a71478337f5ceae30aaac4e1b955ee5 refs/tags/v0.1.1-alpha; 见Jakub Narebski的回答
@CharlesBailey,公平,但问题和答案已经变形,包括注释标签和'git show-ref`在两种不同类型的标签上表现不同的事实并不明显或常识.

3> Hlung..:

只是用 git show

但是,它也会转储提交差异.要省略这些差异,请使用git log -1 .(感谢@DolphinDream和@demisx!)


在SO上,当一个问题有许多不同的可能答案时,首先发布的答案首先会被提升 - 将它们放在列表的顶部,从而让它们在以后得到更多的赞成.这是基于响应速度的响应速度的偏置反馈回路.有足够的想象力可以解决这个问题.
什么是"最佳解决方案"?如果感兴趣的是找出提交的SHA,则标记指向"git show "并不是最佳解决方案.此命令将显示提交引入的整个diff.仅列出提交的SHA,标记指向"git rev-list -n 1"是正确的解决方案.
@Hlung像@DolphinDream指出的那样,`git show`在屏幕上转储了更多不需要的东西.它模糊了正在寻找的实际提交哈希.如果你想要oneliner,更好的命令是`git log -1 [tag-name]`或`git log -1 --pretty = oneline [tag-name]`.

4> orip..:

在我的存储库中,git show-ref TAG显示标记的哈希值,而不是它指向的提交的哈希值.

git show-ref --dereference TAG 此外,还显示了指向的提交.



5> Jakub Narębs..:

使用

git rev-parse --verify ^{commit}

(即使对于带注释的标签,也会返回提交的SHA-1).


git show-ref 如果没有注释也会有用.总是有git for-each-ref(详见文档).


我更喜欢`git rev-parse ~0`这似乎也有效,并且在Windows上不需要特殊的转义(需要四个帽子(^)而不是一个).后缀`〜`给出父提交,因此`~0`产生提交本身.顺便说一下,`^ 0`也是`^ {commit}`修订版后缀的有效简写.

6> 小智..:

来自Igor Zevaka:

摘要

由于大约有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(答案)取决于标签是本地的还是从遥控器取出的.



7> Tuong Le..:

这个怎么样:

git log -1 $TAGNAME

要么

git log -1 origin/$TAGNAME



8> Daniel Littl..:

为了获得标记引用的提交的sha/hash(不是标记的sha):

git rev-list -1



9> gahooa..:

我也想知道"正确"的方式,但与此同时,你可以这样做:

git show mytag | head -1    



10> 小智..:

即使这已经很老了,我想我会指出一个很酷的功能,我刚刚找到列出标签的提交:

git log --decorate=full

它将显示在提交时结束/开始的分支以及提交的标记.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有