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

lsmd5eda  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(296)

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

bqucvtff

bqucvtff1#

标签不会被覆盖,因为它们应该是不可改变的。如果你想让一个对象(实际上)是可改变的,那么就用分支指针或引用来代替。这就给你留下了:git tag -d tagname...,然后再次读取它。

2w3rbyxf

2w3rbyxf2#

首先,与分支不同,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版

hpxqektj

hpxqektj3#

从Git 2.20开始,你需要显式地指定force标志:
git fetch origin --tags --force
在Git 2.20版本之前,与使用git-push[1]推送不同的是,任何对refs/tags/* 的更新都将被接受,而不需要在refspec中使用+(或--force)。在取标签时,我们不规则地将所有来自远程的标签更新都视为强制取标签。从Git 2.20版本开始,获取更新refs/tags/* 的方式与推送时的方式相同。2也就是说,如果在refspec中没有+(或--force),任何更新都将被拒绝。
https://git-scm.com/docs/git-fetch

4bbkushb

4bbkushb4#

git fetch --tags --all --prune
这会明确地告诉git去获取,同时移除远程数据库中已经不存在的标签。

nnvyjq4y

nnvyjq4y5#

git fetch --tags就可以。
docs--tags参数的说明):
大多数标记在下载分支头时会自动提取,但此机制不会提取未指向可从正在跟踪的分支头访问的对象的标记。此标志允许下载所有标记及其关联的对象。可以使用remote. .tagopt设置来指定remote的默认行为。
根据gerrard00的answer,在git Ver2.20或更高版本中,需要使用参数--force来覆盖本地标签。(完整的命令是git fetch --tags --force

相关问题