如何重命名 Git 标签
Git 没有直接重命名标签的命令,做法是建新删旧:git tag 新名 旧名(复制指向),git tag -d 旧名,git push origin 新名,git push origin --delete 旧名。已发布的 tag 改名需谨慎。
Git 不支持直接 rename 标签,用"建新删旧"实现:git tag 新名 旧名 让新标签指向旧标签的提交,git tag -d 旧名 删本地旧的,再分别推送新标签、删除远程旧标签。
操作步骤
# 1. 用旧标签创建新标签(指向同一提交)
git tag v1.1.0 v1.0.0
# 附注标签想保留原说明:
git tag -a v1.1.0 v1.0.0^{} -m "release v1.1.0"
# 2. 删除本地旧标签
git tag -d v1.0.0
# 3. 更新远程
git push origin v1.1.0
git push origin --delete v1.0.0
已发布标签的警告
标签是发布契约:CI 按 tag 构建、用户按 tag 下载、文档引用 tag。改名后:
- 已下载旧 tag 的用户不受影响(他们的引用还在);
- 但引用旧名的链接、文档、脚本全部失效;
- GitHub 上基于旧 tag 的 Release 需要手动重新关联。
发布出去的 tag 宁可补发新 tag 也不要改名。
常见问题(FAQ)
Q:tag 打错了提交(指错位置)怎么办?
同样思路:git tag -d 删掉,git tag 名 正确提交 重建,强推覆盖远程(git push -f origin 标签名)。未被广泛使用的窗口期内操作。
Q:附注标签改名后说明还在吗?
git tag 新名 旧名 只复制指向;想保留完整附注信息用 git tag -a 新名 旧名^{} -m "..."(^{} 解引用到提交),说明需要重新提供。
Q:怎么批量重命名?
没有内建批量操作,脚本循环:for t in $(git tag -l 'release-*'); do git tag "v$t" ... ; done 之类。