我目前忙于一个分支众多的项目,其中有一个标签记录了最后一次更改,但我不确定这个标签是在哪个分支上创建的。
如何查找标签所在的分支?
git branch --contains tags/<tag>
(它适用于任何树形参考)
如果您能找到标签所指向的提交:
git rev-parse --verify tags/<tag>^{commit}
# or, shorter:
git rev-parse tags/<tag>~0
然后,您可以找到包含该提交的分支。
git branch --contains <commit>
如user3356885所述,对于获取的分支(在远程名称空间中的分支)
,commented以下内容:git branch -a --contains tags/<tag>
git branch -a --contains <commit>
正如Pyr3z的答案所指出的那样,对于上面列出的每个候选标签,您可以添加:
git log -1 --pretty='%D' TAG
git branch -a --contains <tag>
从git帮助中得知:
特定的git-branch操作: -a, --all 列出本地分支和远程跟踪分支
——特别是像以下解决方案:
git branch -a --contains TAG
类似的问题在列出多个分支时存在问题,不清楚它实际上是哪个标签产生的。
$ git branch --contains TAG
branch-A
branch-B
* branch-C
branch-D
(*
标记表示当前分支 = 不相关)
哦,而且使用 --sort=-committerdate
或 =-taggerdate
进行排序并不能准确地显示原始分支,因为这些参考属性可能会被与所涉及的标签无关的操作更新。
git show TAG
确实给了我一个问题的真正答案(“这个标签是在哪个分支上创建的?”),但是默认情况下,git show
的格式相当臃肿,而我要寻找的是一种高效、机器友好的输出格式,以便传递给一些自动化脚本。
git log
是完成任务的核心命令:git log -1 --format='%D' TAG
tag: TAG, origin/branch-B, branch-B
这告诉我们标签来源的确切分支,更便于机器阅读。
git log
时,是否会显示_任何_分支? - Pyr3zgit log -1 --format='%D' TAG | grep -Eo '[^ ]+$'
不是百分之百确定,但在我的测试中有效,前提是你要找的分支名总是在最后列出。 - undefinedgit show <tag>
由于标签与特定提交相关联,因此可以使用它来显示该提交-这将为您提供完整的提交详细信息。
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
git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA | sed "s/.*\///"
稍有不同,但受到@ttfreeman答案的启发
使用标签可以标记一个参考点。因此,当您在开发分支上并标记此状态时,您的标签位于实际参考点上。因此,在这种情况下,您可以查看 gitk 或其他显示树形结构的工具。在那里,您可以看到标签所在的参考点。
git:是否有类似于每个分支的标签?
http://git-scm.com/book/en/Git-Basics-Tagging
这里有一个很好的解释。
标签始终指的是提交编号。使用该标签编号,您可以使用以下方法找到放置该标签的分支:
git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"
步骤1. 获取提交 ID:
git show {tag name}
步骤2. 复制提交ID并粘贴以获取所有分支:
By example:
git branch --contains 94a152c2d1c6830c5a044ecf20526d51e64bda83
git branch --contains <tag>
来获取相关标签的分支信息。 - Dan Mouldinggit branch -a --contains <tag>
。对于提交也是同样的操作。 - user3356885git branch --contains <tag>
。git版本为2.23.0,zsh,open SUSE tumbleweed。我认为这不仅适用于我的操作系统或shell,我认为这是现代git版本默认执行的操作。它们会在分页器中打开一个列表。 - redanimalwar