在 git 中,应先检出历史标签(如 git switch --detach v2.1.5),再基于其创建临时修复分支(如 git switch -c hotfix/v2.1.5-login-null-pointer)进行修改提交,最后打新补丁标签(如 v2.1.6)并清理临时分支。

在 Git 中,通过 git checkout(或更推荐的 git switch / git restore)切换到历史标签(tag),再基于该标签创建临时修复分支,是处理线上紧急缺陷的标准做法。关键在于:标签本身是只读快照,不能直接提交,必须新建分支才能修改和提交修复。
确认并检出目标标签
先列出所有标签,确认你要回溯的版本:
-
git tag— 查看本地全部标签 -
git tag -l "v2.1.*"— 按模式筛选(如匹配 v2.1.x 系列) -
git show v2.1.5— 查看该标签指向的提交详情、作者、日期和简短日志
确认无误后,用以下任一命令检出该标签(此时进入“分离头指针”状态):
-
git checkout v2.1.5(传统写法,仍可用) -
git switch --detach v2.1.5(更语义清晰,推荐)
执行后终端会提示 HEAD is now at xxxxxxx v2.1.5,表示已定位到该发布点。
基于标签创建修复分支
不能在分离头指针状态下直接提交。需立即创建新分支,把当前状态作为起点:
-
git switch -c hotfix/v2.1.5-login-null-pointer— 创建并切换到新分支,名称建议含hotfix/前缀和问题简述 - 等价写法:
git checkout -b hotfix/v2.1.5-login-null-pointer
此时你已在可提交的分支上,工作区与 v2.1.5 完全一致,可安全修改代码、测试并提交修复。
修复、提交并推送临时分支
完成缺陷修复后:
git add . && git commit -m "fix: prevent NPE in login service"-
git push origin hotfix/v2.1.5-login-null-pointer— 推送到远程,便于协作或 CI 流水线验证
注意:不要向原标签(如 v2.1.5)强制更新——标签代表不可变的历史里程碑。修复成果应通过新分支走合并流程(例如合并入 release/2.1.x 或打新补丁标签 v2.1.6)。
后续建议:打新补丁标签并清理
修复经验证后,通常需发布补丁版本:
- 切回修复分支:
git switch hotfix/v2.1.5-login-null-pointer - 打新标签:
git tag -a v2.1.6 -m "Release v2.1.6 with login NPE fix" - 推送标签:
git push origin v2.1.6 - 合并进长期维护分支(如
release/2.1.x)后,可删除临时分支:git branch -d hotfix/v2.1.5-login-null-pointer && git push origin --delete hotfix/v2.1.5-login-null-pointer
不复杂但容易忽略:始终用分支承载变更,让标签保持只读、可信、可追溯。











