【问题标题】:How to diff between git tag and branch如何区分 git 标签和分支
【发布时间】:2016-10-26 12:39:02
【问题描述】:

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

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

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

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

【问题讨论】:

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

标签: git tags branch diff


【解决方案1】:

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

  1. 切换到它(用git checkout 1.4),然后我可以做git diff v1.4.16
  2. 远程参考:git diff v1.4.16..origin/1.4

两者都达到了我的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多