可以将轻量级标签转换为带注释的标签吗?

Stu*_*t K 36 tags git git-tag

我使用轻量级标记标记了一个提交,并将该标记推送到远程仓库,与其他开发人员共享.我现在意识到我应该注释它以便它出现在git describe.

有没有办法转换它/重新标记提交而不破坏事情?

CB *_*ley 31

轻量级标记只是指向该提交的"ref".您可以在旧标记的顶部强制创建新的带注释标记:

git tag -a -f <tagname> <tagname>
Run Code Online (Sandbox Code Playgroud)

从Git v1.8.2开始,你需要使用--force替换遥控器上的任何标签git push,即使你用一个有效的快进或真正的标签对象替换一个轻量级标签,指向与现有标签相同的提交标签参考.

git push --force origin <tagname>
Run Code Online (Sandbox Code Playgroud)

  • 但这不会使用令人困惑的日期吗? (3认同)
  • 如果您不想标记标记标记,请改为使用`git tag -a -f <tagname> <tagname> ^ 0`.否则,您将创建对旧标记的新引用,而不是被盗的`refs/tags/<tagname>`,将其从垃圾回收中排除. (3认同)
  • 另外,对于已经拉取原始轻量级标签的开发人员有什么影响吗?这些开发人员在再次拉取后是否会看到新标签的注释,或者他们之前是否需要做一些特殊的事情(例如删除他们的本地标签)? (2认同)
  • 警告:如果您在 GitHub 存储库上执行此操作,并且您要替换的轻量级标记与某个版本相关联,则删除它将“静默删除”与该轻量级标记关联的整个版本(和版本说明)。正如[此处](https://github.community/t/can-deleted-release-notes-be-restored/670)所述,无法恢复意外删除的版本。 (2认同)

Sam*_*amB 21

根据Charles的回答这篇博客文章,我认为最好使用这样的东西:

#!/bin/sh
tag=$1
date="$(git show $tag --format=%aD | head -1)"
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag
Run Code Online (Sandbox Code Playgroud)

  • 很好:)而不是`| head -1`你可以使用`-s`或`--no-patch`.并且可能需要使用_committer_ date(`%cD`)(以及它们的名称,`%cn`,作为`GIT_COMMITER_NAME`). (3认同)

Sta*_*nko 6

将所有标签转换为带注释的(基于 Charles Bailey 的示例和 Ferenc W\xc3\xa1gner 的评论):

\n\n
for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done\ngit push --tags --force\n
Run Code Online (Sandbox Code Playgroud)\n