如何在 git 标签和分支之间区分

How to diff between git tag and branch

提问人:Capt. Crunch 提问时间:6/24/2016 更新时间:6/25/2016 访问量:60754

问:

在试图了解 Appium 1.4 分支的 HEAD 和标签 v1.4.16 之间的区别时,我没有找到一种方法来告诉 git diff 区分标签和分支。

据我了解,从 git diff 的角度来看,标签和分支都只是提交哈希的别名,不是吗?

我最终只是创建了指向分支头 () 的标签“v1.4”,然后我就可以做并看到我所追求的差异。git checkout 1.4; git tag -a v1.4git diff v1.4.16..v1.4

但这似乎有点奇怪,这是实现我需要的唯一方法吗?

git 标签 分支 差异

评论

0赞 Tim Biegeleisen 6/24/2016
您还可以使用提交的 SHA-1 哈希值而不是标记。你的问题是什么?
3赞 torek 6/24/2016
目前还不清楚你提问的意图是什么。的确,在 Git 中,任何一个引用都只是解析为特定的提交哈希。但是,除了完整引用名称的拼写之外,— 与 — 的意图是不同的:随着分支的发展,分支名称旨在随着时间的推移解析为不同的提交,而标记名称旨在永远解析为相同的单个提交。但是,当您运行 时,它只需要立即解析名称,因此无需关心这一点。refs/heads/somebranchrefs/tags/sometaggit diff
0赞 ElpieKay 6/24/2016
标记可以指向提交,但并非总是如此。分支 ref 指向提交。提交指向一棵树。在您的示例中,标记和分支都指向提交。因此,在您的例子中,标记和分支之间的差异基本上是显示两个提交或两个树或两个树中的特定 blob 之间的更改。您可以在“Pro Git”中查看“Git Internals”一章,了解 blob、tree、commit 和 tag 等 git 对象。
1赞 torek 6/24/2016
@ElpieKay:标签确实可以指向任何内容(我这样做只是为了尝试一下——标签和带注释的标签可以指向任何对象)。但是,一般情况下,标记在此处解析为提交 ID。Git 通常不允许您将分支名称设置为指向提交以外的内容(我也尝试过,就像一种折磨测试一样)。
1赞 torek 6/24/2016
@AmosShapira:将任何有效的标识符转换为 Git 哈希。标识符可能需要特定类型的对象(例如,转换为树对象,如果需要,解包标记和提交,或者如果无法解析为树,则失败)。一般来说,你不需要这么花哨:只需输入名称(在这个例子中),Git 通常会做正确的事情。git rev-parsex^{tree}xxx

答:

37赞 Capt. Crunch 6/25/2016 #1

感谢大家的主要建议。问题似乎是我没有本地分支机构。我可以通过以下几种方式实现我想要的(即原始 Git 存储库上的标签和分支头之间的差异):1.4

  1. 切换到它(使用 ),然后我就可以了git checkout 1.4git diff v1.4.16
  2. 在遥控器上参考它:git diff v1.4.16..origin/1.4

两者都达到了我想要的。

评论

1赞 eastwater 5/18/2022
git diff 1.7 ---模棱两可的参数“1.7”:未知的修订版或不在工作树中的路径。1.7 是一个标签。