此命令获取所有标签:
git fetch origin --tags
此命令获取特定标签:
git fetch origin refs/tags/1.0.0
但是,这并不让我做:
git checkout tags/2.3.18
我怎样才能取一个标签,然后执行结账?
git fetch origin refs/tags/1.0.0
这将失败,因为它不写一个本地的参考:它获得远程的refs/tags/1.0.0
,任何标记物(S),承诺等,用它去要求;它丢弃那些到FETCH_HEAD
(所有git fetch
命令总是这样);和......就是这样。它永远不会在你的资料库创建参考refs/tags/1.0.0
,即使它有它需要做的等等应有尽有。
为了使,如果它不存在,就创建一个这样的标签:
git fetch origin refs/tags/1.0.0:refs/tags/1.0.0
冒号右侧的名字是你的Git会在你的仓库使用的名称。你可以把这个标记成一个分支命名wacky
,例如,通过将其命名为refs/heads/wacky
。 (没有理由这样做。我所描述的这只是一个例子。)
这是一个非强制提取,因此,如果你已经有了一个refs/tags/1.0.0
,你的Git会拒绝更新您参考。如果你想覆盖任何现有1.0.0
标签,使用方法:
git fetch origin +refs/tags/1.0.0:refs/tags/1.0.0
如果你想获取所有的标签,有或没有覆盖:
git fetch origin 'refs/tags/*:refs/tags/*'
带或不带前导的加号。 (注:引号只是为了保护*
从外壳的加号可以去里面或引号外面事实上,引号本身可以去任何地方,只要他们全部包围星号或其他的shell元字符。:
refs/tags/'*:refs/tags/*'
或者你可以用反斜杠来代替:
refs/tags/\*:refs/tags/\*
在任何情况下,我们只是从保护壳的敏感星号“星号是美味,让我们吃”的功能。)
当您指定明确的裁判来git fetch
,你需要或者提供您refspec映射或你想与自己记录在FETCH_HEAD
所取得的ID是什么。
具有无映射提供的情况下的优点做取出的参考文献没有默认的处理是,无映射提供的情况下确实在所取出的参没有默认处理。你可以欣赏
git fetch origin v2.3.18
git tag v2.3.18 FETCH_HEAD # ← git tag !$ FE<TAB>
当你真的只想要只是一个标签在你的本地仓库设置,而不是然而,许多几十个原点回购点之前标记为获取历史。
我读了所有的答案,但有没有提到一个语法糖。如果您需要获取只有一个标签为标签(后来结帐),你可以写,例如用于refs/tags/2.3.18
:
git fetch origin tag 2.3.18 --no-tags
这对于已经提到的快捷方式:
git fetch origin refs/tags/2.3.18:refs/tags/2.3.18 --no-tags
当然,如果你需要其他的标签(根据默认的行为),你可能无法使用--no-tags
或者,如果你已经明确设置--no-tag
在clone
命令或tagOpt
配置选项(man git-clone
)。
git fetch origin tag 2.3.18