如何用git fetch覆盖本地标签?

时间:2012-03-12 05:42:22

标签: git

如何使用git fetch覆盖本地标签? 我想用远程标签替换本地标签。

5 个答案:

答案 0 :(得分:6)

git fetch --tags --all --prune

这将明确告诉git获取,同时删除遥控器上不再存在的标签。

答案 1 :(得分:5)

git fetch --tags会这样做。

来自docs--tags参数说明):

  

大多数标签在下载分支头时自动获取,但是这些机制不会获取不指向从被跟踪的分支头可到达的对象的标签。该标志允许下载所有标签及其相关对象。可以使用remote..tagopt设置指定远程的默认行为。

答案 2 :(得分:2)

从Git 2.2.0开始,您需要显式指定force标志:

git fetch origin --tags --force

  

直到Git版本2.20,与使用git-push [1]推送时不同,在refspec(或--force)中不带+的任何对refs / tags / *的更新将被接受。提取时,我们混杂地认为来自远程的所有标签更新都是强制提取。从Git 2.20版本开始,获取更新refs / tags / *的方式与推送时相同。即在refspec(或--force)中不带+的所有更新将被拒绝。

     

https://git-scm.com/docs/git-fetch

答案 3 :(得分:0)

首先,与分支不同,git不跟踪与本地标记不同的远程标记。完成提取后,它们无法区分。

  • 会更新本地标记(即使手册没有说明)
    • git fetch --tags
  • 不会更新本地标记
    • git fetch
    • git fetch --prune
    • git fetch --prune --force

标签更新/覆盖如下所示:

From git:path/name
 - [tag update]      my_tag -> my_tag

这适用于轻量级和带注释的标签,甚至是混合标签。也就是说:带注释的标签可能会被轻量级标签覆盖,反之亦然。

我使用的是git版本2.7.4

答案 4 :(得分:-1)

标签不会被覆盖,因为它们是不可变的。如果你想拥有一个(实际上)可变的对象,请使用分支指针或ref。 这将离开你:git tag -d tagname ...,然后再次获取它。