17.3 删除里程碑
如果里程碑建立在了错误的提交上,或者对里程碑的命名不满意,可以删除里程碑。删除里程碑使用命令git tag-d,下面用命令删除里程碑mytag。
$git tag-d mytag
Deleted tag 'mytag' (was 60a2f4f)
里程碑没有类似reflog的变更记录机制,一旦删除不易恢复,慎用。在删除里程碑mytag的命令输出中,会显示该里程碑所对应的提交ID,一旦发现删除错误,赶紧补救还来得及。下面的命令实现对里程碑mytag的重建。
$git tag mytag 60a2f4f
Git没有提供对里程碑重命名的命令,如果对里程碑名字不满意的话,可以删除旧的里程碑,然后重新用新的名称创建里程碑。
为什么没有提供重命名里程碑的命令呢?按理说只要将.git/refs/tags/下的引用文件改名就可以了。这是因为里程碑的名字不但反映在.git/refs/tags引用目录下的文件名,而且对于带说明或签名的里程碑,里程碑的名字还反映在tag对象的内容中。尤其是带签名的里程碑,如果修改里程碑的名字,不但里程碑对象内容势必要变化,而且里程碑也要重新进行签名,这显然难以自动实现。
在第6篇第35章的“35.4 Git版本库整理”一节中会介绍使用git filter-branch命令实现对里程碑自动重命名的方法,但是那个方法也不能毫发无损地实现对签名里程碑的重命名,被重命名的签名里程碑中的签名会被去除,从而成为带说明的里程碑。