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

lin*_*ize 18 git

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

ger*_*d00 24

从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


eck*_*kes 6

git fetch --tags 会做的。

文档--tags参数说明):

大多数标签会在下载分支头时自动获取,但此机制不会获取不指向可从正在跟踪的分支头到达的对象的标签。此标志允许下载所有标签及其关联对象。远程的默认行为可以通过 remote.<name>.tagopt 设置指定。

根据 gerrard00 的回答,该--force参数是覆盖 git Ver2.20 或更高版本中的本地标签所必需的。(完整的命令是git fetch --tags --force

  • 但我问的是如何覆盖现有的本地标签,因为它们被错误地创建 (5认同)
  • 更新:在较新版本的 git 中,这将不再更新本地标签。你可以使用 `git fetch &lt;remote&gt; '+refs/tags/*:refs/tags/*'` 强制更新它们(`--force` 也可能有效,但我没有测试过)。 (5认同)
  • `git fetch --tags --force` 确实会用远程标签覆盖本地标签。 (2认同)

lig*_*iri 6

git fetch --tags --all --prune

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

  • 这似乎并没有删除仅在本地存在的标签。 (2认同)