git ls-remote 中的 ^ 是啥意思?

Posted

技术标签:

【中文标题】git ls-remote 中的 ^ 是啥意思?【英文标题】:What is the mean of ^ in git ls-remote?git ls-remote 中的 ^ 是什么意思? 【发布时间】:2022-01-22 22:52:05 【问题描述】:

符号^是什么意思? 如果我使用 git log 或 github 检查带有此符号的行中对提交的标记引用,那么没有此符号的重复对象是什么。

例子

2191702bddc9438e2e8beda602972fdb87a73a15        refs/tags/V1.0
0bfeb6f7a1d2789b3e3d9944edbe680cd7355b6a        refs/tags/V1.0^
6bde933efef11bbc75f71df2111b146748220ad8        refs/tags/V2.0
de33c8da37dba18f8d134f6a2a4c1e70da5593ae        refs/tags/V2.0^

【问题讨论】:

<some ref>^ 是将某些东西(标签、分支)dereference 指向它最终指向的提交的语法。对于分支abcabc^ 表示“分支 abc 当前指向的提交” 您运行了什么命令来获得该输出? ^ 语法将“带注释的标签”解析为其“基础对象”(例如参见 ***.com/questions/49283734/… 和 ***.com/questions/43858778/…),但我不确定您看到的是实际重复的标签,还是两行每个标签。 看起来0bfeb6f7 是上面标记对象(2191702bd)引用的提交对象。第二个标签及其目标提交也是如此。 @IMSoP 命令是git ls-remote --tags @yaronsamuel 见git help revisions 【参考方案1】:

这些是带注释的标签。

另一种类型,轻量级标签,是指提交的名称。标签本身在 git 存储库中不作为单独的对象存在,但它只是普通提交对象的替代名称。

您的列表中的每个此类标签只有 1 行,例如:

1234567890c9438e2e8beda602972fdb87a73a15        refs/tags/lightweight

作为一个 git 图,你可以这样想:

                       master
                         v
*----*----*----*----*----*
                    ^
                  v9.1

但是,存在两行,其中一行使用 ^ 语法,意味着这些标签是带注释的标签。

它们在 git 存储库中作为它们自己的单独对象存在,并且还引用常规提交对象。

所以用这两行:

2191702bddc9438e2e8beda602972fdb87a73a15        refs/tags/V1.0
0bfeb6f7a1d2789b3e3d9944edbe680cd7355b6a        refs/tags/V1.0^

这意味着带注释的标签对象在id为2191702...的对象中,而该标签对象指的是提交0bfeb6f7a...

                       master
                         v
*----*----*----*----*----*
                    |
                 tag-object
                    ^
                  V1.0

TL,DR:轻量级标签只显示第一行,第二行的存在意味着这些是带注释的标签,其中标签名称是指一个带注释的标签对象,而带有^ 的第二个引用表示提交标签所指的。

【讨论】:

感谢您的有用回答。有理由更喜欢带注释的标签而不是轻量级标签吗? 轻量级标签只是提交的替代名称。一个带注释的标签可以有一条消息,并且会有一个作者和一个时间戳。带注释的标签也可以签名。

以上是关于git ls-remote 中的 ^ 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins : Error performing command: git ls-remote -h

jenkins学习16-无法连接仓库:Error performing git command: git ls-remote -h

EGit 的“自动共享位于 git 存储库中的项目”选项是啥意思?

无法连接到存储库:执行 git 命令时出错:ls-remote -h https://github.com/hichemmehdi/EmployeeManager.git HEAD

(已解决)npm ERR! command failed npm ERR! command git ls-remote ssh://git@github.com/nhn/raphael.git

centos下git报错Failed to connect to repository : Command "git ls-remote -h HEAD" returned sta