git show v1.2.0 --stat
git tag -f v1.2.0 9f3c2a1
git push origin refs/tags/v1.2.0 --force

发版后发现 v1.2.0 指向的是上一个提交,git describe 显示 v1.2.0-1-g9f3c2a1。CI 按 tag 打包,产物里少了这次的两个修复。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,打轻量标签时没写提交号,默认落在当前 HEAD,切错分支或者晚打一步就偏了。标签推上去以后不会随分支移动,本地改完还得单独强推 refs/tags 才会覆盖。

「tag 移动」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

处理上按这个顺序:git show v1.2.0 --stat 核对标签指向的提交内容;确认正确提交后 git tag -f v1.2.0 提交号 重新打;git push origin refs/tags/v1.2.0 --force 覆盖远端;通知 CI 按新 tag 重新打包 旧产物作废;后续用 git tag -a 附注标签 写上发版说明。

改完只确认一件事:git describe 显示 v1.2.0 正好在目标提交上 远端 tag 哈希与本地一致。

作者 9823189