Git:如何找出标签在哪个分支上?

Posted

技术标签:

【中文标题】Git:如何找出标签在哪个分支上?【英文标题】:Git: How to find out on which branch a tag is? 【发布时间】:2013-03-26 05:54:53 【问题描述】:

我目前正忙于一个有很多分支的项目,并且我有一个标签,用于记录在其中一个分支上完成的最后更改。但我不清楚这个标签在哪个分支上。

如何找出标签在哪个分支上?

【问题讨论】:

【参考方案1】:

更短:

git branch --contains tags/<tag>

(它适用于任何树状参考)


如果你能找到which commit a tag refers to:

 git rev-parse --verify tags/<tag>^commit
 # or, shorter:
 git rev-parse tags/<tag>~0

然后你可以找到which branch contain that commit。

git branch --contains <commit>

作为user3356885 下方的commented,用于获取的分支(远程命名空间中的分支)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>

【讨论】:

在我的 Git 版本 1.7.1 上,我可以简单地执行 git branch --contains &lt;tag&gt; @DanMoulding 是的,我已经编辑了答案以反映这一点。我最初对找到附加到标签的提交感兴趣。 在这种情况下,寻找在远程分支上创建的标签不会产生任何结果。换句话说,对于本地不存在的分支,不会产生任何结果。选项 -a 应该用于此。 git branch -a --contains &lt;tag&gt;。同样适用于提交。 不幸的是,这会返回多个内容: * (HEAD detached at 82dd3f0) master refs/tags/0.0.1-test-masterBr --> 我想以编程方式访问分支,没有 HEAD 信息或标签本身 git branch --contains &lt;tag&gt;。 git 版本 2.23.0,zsh,打开 SUSE tumbleweed。我不认为这特定于我的操作系统或 shell,我认为这是现代 git 版本的默认设置。他们在寻呼机中打开一个列表【参考方案2】:

如果“git branch --contains”什么都不做,请确保您包含所有分支,包括远程和本地分支:

git branch -a --contains <tag>

来自 git 帮助:

具体的 git-branch 动作: -a, --all 列出远程跟踪和本地分支

【讨论】:

【参考方案3】:

关于@VonC 关于查找标签引用的提交的评论,只需使用:

git show <tag>

由于标签与特定提交相关联,因此可用于显示该提交 - 这将为您提供完整的提交详细信息。

【讨论】:

【参考方案4】:
git branch --contains tag

对我没有任何帮助,但我在 git gui 中找到了解决此问题的方法。

这样开始:

git gui

(在我的 Ubuntu 上,我必须先使用 sudo apt-get install git-gui 安装它。)

然后我选择了菜单项Repository -> Visualize All Branch History。在结果窗口中,我选择了菜单项 File -> List References

另一个窗口弹出,列出了我所有的标签(和其他参考)。这些是可点击的,点击其中一个后,我只需要检查左下角的分支列表即可。像这样:

Parent: somesha (message)
Parent: someothersha (another message)
Child:  anothersha (yet another message)
Branches: branch1, master, remotes/origin/branch2, remotes/upstream/branch1, etc
Follows: v1.1.2
Precedes: v1.1.4

【讨论】:

【参考方案5】:

你也可以试试这个,有类似的用例,这对我有用

git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA  | sed "s/.*\///"

略有不同,但从@ttfreeman 的回答中汲取灵感

【讨论】:

【参考方案6】:

使用标签可以标记参考。因此,当您在开发分支上并标记此状态时。您的标签在实际参考上。因此,在这种情况下,您可以查看 gitk 或其他显示树的工具。在那里你可以看到标签在哪个引用上。

git: Is there something like per-branch tags?http://git-scm.com/book/en/Git-Basics-Tagging

这里有一个很好的解释。

【讨论】:

【参考方案7】:

标签总是指提交号。使用该标签号,您可以使用以下命令找到放置标签的分支:

git for-each-ref | grep $commit_num | grep origin | sed "s/.*\///"

【讨论】:

【参考方案8】:

第 1 步。获取提交 ID:

git show tag name

第 2 步。复制提交 ID 并粘贴以获取所有分支:

By example:
git branch --contains 94a152c2d1c6830c5a044ecf20526d51e64bda83

【讨论】:

以上是关于Git:如何找出标签在哪个分支上?的主要内容,如果未能解决你的问题,请参考以下文章

git - 如何判断提交属于哪个分支?

git 分支和标签如何存储在磁盘中?

通过 Git 远程跟踪分支的给定名称如何找到哪个本地分支跟踪它?

如何在 Git 的当前分支中获取最新的标签名称?

如何提交两个分支的“git diff”?

Git Flow 应该如何与 QA 一起测试版本和新功能?