我已经为一个提交打上了轻量级标签,并将该标签推送到与其他开发人员共享的远程仓库。现在我意识到我应该注释它,以便在 git describe
中出现。
有没有一种方法可以在不破坏东西的情况下转换它或重新标记该提交?
轻量级标签只是指向该提交的'ref'。您可以在旧标签之上强制创建一个新的注释标签:
git tag -a -f <tagname> <tagname>
从Git v1.8.2开始,即使您要用新的轻量级标签替换现有标签引用并且这个新标签在指向与原标签相同的提交时是可以快进的或是真正的标签对象,您也需要使用--force
选项才能用git push
将其推送到远程。
git push --force origin <tagname>
根据Charles的答案以及这篇博客文章,我认为最好使用类似于以下内容的方法:
#!/bin/sh
tag=$1
date="$(git show $tag --format=%aD | head -1)"
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag
-s
或 --no-patch
替代 | head -1
。也许使用提交者日期 (%cD
) (以及他们的姓名, %cn
,作为 GIT_COMMITTER_NAME
) 更为理想。 - Tobias KienzlerGIT_COMMITTER_EMAIL
- %ce
(注:committer 总是拼写为双 T
) - Kay将所有标签转换为注释(基于Charles Bailey的示例和Ferenc Wágner的评论):
for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done
git push --tags --force
git describe --tags
来搜索时包括轻量级标签。
git tag -a -f <tagname> <tagname>^0
命令。否则,您将创建对旧标签的新引用,而非被删除的refs/tags/<tagname>
,这将导致其无法进行垃圾回收。 - Ferenc Wágner