如果git标记在远程更改,则git fetch不会在本地更新它.这是一个错误吗?

don*_*llo 53 git

我通过删除本地标签然后进行git fetch来修复它以用于我的repo.这带来了更新的标签.

是否有"正确"的方式来更新遥控器上可能已更改的标签?这是一个简单的标签,没有签名或任何东西,用"git tag"创建

Von*_*onC 78

确保获取所有标记(直通git fetch --tags),以获取所有标记,而不仅仅是引用从分支头可以访问的提交.

那些(获取的)标签是带注释的(并且通常不是轻量级的),如果你在本地仓库上添加已删除的标签,它们只会在获取后弹回.

但是,如果您删除了一个轻量级的,则需要在本地重新创建它:通常不会向远程仓库推送或从远程仓库中提取轻量级标记.

请注意,启动git 1.9/2.0(2014年第一季度),git fetch --tags将获取所有内容(如git fetch),以及标记.请参阅"是" git fetch --tags"包含" git fetch"? ".

同样,获取"一切"意味着注释和轻量级(如果先前推送了那些轻量级标签).


如下所述,在biocyberman回答中,如果你想从所有遥控器(而不仅仅是名为' origin' 的默认遥控器)中获取标签,你需要添加该--all选项.

git fetch --tags --all
Run Code Online (Sandbox Code Playgroud)


yuc*_*cer 15

我认为正确的方法是:

  git fetch origin --tags --force
Run Code Online (Sandbox Code Playgroud)

您应该避免使用具有相同标签名称的分支,因为签出会优先考虑该分支,并且您可能会因为标签未更新而陷入困境。在这种情况下,也许git应该发出警告,例如:

您更新的标签现在与同名分支不同。对“标记名”的引用变得模棱两可。

  • 这应该是正确的答案。如果标签已*移动*,每个人都需要使用 --force 来更新其本地副本。 (5认同)

man*_*lds 8

您所说的是正确的方法,这是git tag手册推荐的内容(实际上,它说,除非世界即将结束,否则不要更改远程仓库上的标签):

git tag -d X
git fetch origin tag X
Run Code Online (Sandbox Code Playgroud)

  • "永远不要改变远程标签!"这是一个很好的警告! (4认同)
  • @flybird是的不是一个好主意,但有时我们会犯错误或匆忙决定所以清理遥控器并使用`git tag -l |删除所有本地标签 xargs git tag -d`然后再次获取它们`git fetch --tags`我认为最好不要改变所以在设置时要小心.很多人似乎都喜欢https://www.drupal.org/node/1015226上的drupal指南 (2认同)
  • 我无法在手册中找到对此"不要更改远程仓库上的标签,除非世界即将结束"的参考.你能给出确切的参考吗?我想更多地了解这个问题. (2认同)
  • 该参考资料位于 https://git-scm.com/docs/git-tag#_on_re_tagging,以防 4.5 年后这仍然是一个问题。:D (2认同)