在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
的本地引用中,而不是普通标记中?
谢谢你,
1条答案
按热度按时间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,给出这个命令的输出示例:如果你想 checkout
refs/tags/v3.3
引用的提交,你可以运行git checkout 8189b9a4b6ba066c4f29544d1b755b5fd2426b62
。