2011-02-15 73 views
26

我用一个轻量级标记标记了一个提交,并将该标记推送到与其他开发人员共享的远程回购。我现在已经意识到我应该注释它,以便它出现在git describe轻量级标签可以转换为注释标签吗?

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

回答

23

一个轻量级标签只是一个指向该提交的'ref'。在旧标签的顶部,你可以强制创建一个新的注释标签:

git tag -a -f <tagname> <tagname> 

正如吉特v1.8.2的,你需要使用--force以取代git push一个摇控器上的标签,即使要更换一个轻量级标签,其中有一些实际上是快进或真实标签对象,指向与现有标签引用相同的提交。

git push --force origin <tagname> 
+3

但不会在使用混乱的日期? – SamB 2014-01-09 19:06:49

+1

另外,对于已经拉动原始轻量级标签的开发者是否有任何影响?那些开发者在再次拉动新标签后会看到注释,还是需要做一些特殊的事情(如删除他们的本地标签)? – sschuberth 2015-07-23 10:23:21

17

基于Charles' answerthis blog post,我认为这是更好地使用这样的事情:

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

你也可以简单地使用git describe --tags也包括在搜索轻量级标签。

1

转换所有标签注解(基于查尔斯·贝利的例子,费伦茨·瓦格纳的评论):

for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done 
git push --tags --force