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 指向它最终指向的提交的语法。对于分支abc
,abc^
表示“分支 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