git 如何在不创建本地标记的情况下检出远程标记

kyvafyod  于 2023-01-07  发布在  Git
关注(0)|答案(1)|浏览(105)

在git中,如果我想 checkout 一个远程分支而不创建本地分支,我可以运行:
第一个月
我就只剩下一个独立的脑袋指着正确的地方。
如何执行完全相同的操作, checkout 远程上的标记而不创建本地标记
我可以看到遥控器上有一个标签,如下所示:

git ls-remote --tags remotename
8189b9a4b6ba066c4f29544d1b755b5fd2426b62  refs/tags/v3.3
89a3f254b63819035f65d9c5dcdae8864f1a6a8a  refs/tags/v3.4

以下各项似乎都不起作用:

git checkout remotename/tagname
git checkout remotename/tags/tagname
git checkout remotename/refs/tags/tagname

我不想运行git fetch --tags或任何等效的代码,因为我不想创建本地标记(也许我已经有了一个同名的标记,我不想破坏它)。
除了复制和粘贴git散列之外,我如何通过ls-remote --tags可以看到的名称 checkout 标记?
(Also使事情进一步复杂化的是,远程节点具有一些名称与标签相同但指向不同提交的分支)。

    • 编辑:**

现在我明白了remotename/branchname是一个局部引用,它是由git fetch自动创建的,没有参数。
是否有人能够提供一个命令,将远程数据库上的所有标记提取到remotename/tags/tagname的本地引用中,而不是普通标记中?
谢谢你,

6pp0gazn

6pp0gazn1#

请记住,除了极少数命令之外,git对远程存储库一无所知,只对本地数据进行操作。
当你git checkout remotename/branchname时,你只处理 local 引用:当你克隆一个仓库或者用git fetch/pull/remote update/etc更新远程仓库的本地缓存时,git会为所有的远程分支创建 local 引用(以远程名称为前缀)。
如果你想 checkout 一个“remote”标签,你需要本地也有这个引用,你可以通过运行git pull --tags或者一个等效的命令来得到。
现在,你当然可以从git ls-remote --tags的输出中提取提交id,给出这个命令的输出示例:

$ git ls-remote --tags remotename
8189b9a4b6ba066c4f29544d1b755b5fd2426b62  refs/tags/v3.3
89a3f254b63819035f65d9c5dcdae8864f1a6a8a  refs/tags/v3.4

如果你想 checkout refs/tags/v3.3引用的提交,你可以运行git checkout 8189b9a4b6ba066c4f29544d1b755b5fd2426b62

相关问题