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

Via*_*iuk 56 tags git branch

我目前正忙着有很多分支的项目,我有一个标签,用于最后一次更改,其中一个分支完成.但是我不清楚这个标签在哪个分支上.

如何找出哪个分支标签?

Von*_*onC 82

更短:

git branch --contains tags/<tag>
Run Code Online (Sandbox Code Playgroud)

(适用于任何树形参考)


如果您可以找到标记引用的提交:

 git rev-parse --verify tags/<tag>^{commit}
 # or, shorter:
 git rev-parse tags/<tag>~0
Run Code Online (Sandbox Code Playgroud)

然后,您可以找到包含该提交的分支.

git branch --contains <commit>
Run Code Online (Sandbox Code Playgroud)

如下面由user3356885 评论,对于获取的分支(在远程命名空间中的分支)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>
Run Code Online (Sandbox Code Playgroud)

  • 在我的Git版本1.7.1中,我可以简单地执行`git branch --contains <tag>`. (6认同)
  • 在这种情况下,查找在远程分支上创建的标记不会产生任何结果.换句话说,不会为本地不存在的分支生成结果.选项*-a*应该用于此.`git branch -a --contains <tag>`.同样适用于提交. (4认同)
  • 感谢@ownsourcing_dev_training进行编辑。 (2认同)
  • 不幸的是,这会返回多个内容: * (HEAD detached at 82dd3f0) master refs/tags/0.0.1-test-masterBr --&gt; 我想以编程方式访问分支,没有 HEAD 信息或标签本身 (2认同)

小智 18

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

git branch -a --contains <tag>
Run Code Online (Sandbox Code Playgroud)

从git帮助:

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


Pyr*_*r3z 10

我的问题是这里的最佳答案\xe2\x80\x94

\n

\xe2\x80\x94具体解决方案如

\n
git branch -a --contains TAG\n
Run Code Online (Sandbox Code Playgroud)\n

类似的问题是能够在输出中列出多个分支,并且不清楚标签实际上源自哪个分支:

\n
$  git branch --contains TAG\n   branch-A\n   branch-B\n * branch-C\n   branch-D\n
Run Code Online (Sandbox Code Playgroud)\n

*标记当前分支 = 不相关)

\n

哦,用--sort=-committerdateor排序并=-taggerdate不能完全澄清原始分支,因为这些 ref 属性可以通过与相关标签无关的操作来更新。

\n

git show TAG

\n

确实给了我问题的真正答案(“这个标签是在哪个分支上创建的?”),但是git show默认情况下该格式相当庞大,而我正在寻找一种高效、机器友好的输出格式,以便通过一些自动化脚本。

\n

事实证明,git log这项工作的核心命令是:

\n
git log -1 --format=\'%D\' TAG\n
Run Code Online (Sandbox Code Playgroud)\n

这给出了如下输出:

\n
tag: TAG, origin/branch-B, branch-B\n
Run Code Online (Sandbox Code Playgroud)\n

它准确地告诉我们标签起源于哪个分支,并且更易于机器读取。

\n


arp*_*ieb 7

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

git show <tag>
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ric 5

git branch --contains tag
Run Code Online (Sandbox Code Playgroud)

对我没什么用,但我在git gui找到了解决这个问题的方法.

像这样开始:

git gui
Run Code Online (Sandbox Code Playgroud)

(在我的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
Run Code Online (Sandbox Code Playgroud)