如何区分 Git 标签和分支?

42

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

就我所理解的而言,从git diff的角度来看,标签和分支只是一个提交哈希值的别名,对吗?

最终,我只需创建指向分支HEAD的标签“v1.4”(git checkout 1.4; git tag -a v1.4),然后就可以执行 git diff v1.4.16..v1.4 并查看我想要的差异了。

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


你也可以使用提交的SHA-1哈希值代替标签。你有什么问题? - Tim Biegeleisen
3
你的问题意图并不是很清楚。在Git中,参考引用通常指向一个特定的提交哈希值。除了完整引用名称的拼写差异,例如"refs/heads/somebranch"和"refs/tags/sometag"之外,其意图也有所不同:分支名称旨在随着分支的发展而解析为不同的提交记录,而标签名称则旨在永久解析为相同的单个提交记录。但是,当你运行git diff命令时,它只需要立即解析名称,所以不需要关注这些内容。 - torek
@TimBiegeleisen 我没有找到显示标签指向的哈希值的方法。如果我找到了,那么我想我可以使用它。 - Capt. Crunch
1
@ElpieKay:标签确实可以指向任何东西(我曾经试过,标签和带注释的标签都可以指向任何对象)。然而,通常情况下,标签应该在这里解析为提交ID。Git通常不允许您将分支名称设置为指向除提交以外的其他内容(我也尝试过,只是作为一种折磨测试)。 - torek
1
@AmosShapira:git rev-parse 可以将任何有效的标识符转换为 Git 哈希值。该标识符可以需要特定类型的对象(例如,x^{tree}x 转换为树形对象,展开标签和提交(如果需要),否则如果 x 无法解析为树,则失败)。一般来说,您不需要这么复杂:只需输入名称(在此示例中为 x),Git 通常会做正确的事情。 - torek
显示剩余5条评论
1个回答

36

感谢大家提供的建议。问题似乎出在我没有本地分支1.4上。我有两种方法可以达到我想要的目的(即在原始Git repo上标记和分支头之间进行差异):

  1. 切换到该分支(使用git checkout 1.4),然后我可以执行git diff v1.4.16
  2. 在远程引用它:git diff v1.4.16..origin/1.4

这两种方法都能实现我想要的效果。


1
git diff 1.7 --- '1.7'不明确:未知的修订版本或路径不在工作树中。1.7是一个标签。 - eastwater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接