P36 Git 怎么修复线上突发 bug
面试题:线上出了紧急 bug,但 develop 分支上还有一堆没验证的功能,怎么用 Git 快速修复上线?
标准流程:从线上稳定分支拉 hotfix 分支
bash
# 1. 切到线上稳定分支(如 master / release),先同步最新
git checkout master
git pull
# 2. 拉一条 hotfix 分支
git checkout -b hotfix/xxx-urgent-bug
# 3. 修复代码、提交
git add .
git commit -m "fix: 紧急修复 xxx"
# 4. 测试通过后合并回 master(禁止快进,保留合并记录)
git checkout master
git merge --no-ff hotfix/xxx-urgent-bug
# 5. 打标签、发布
git tag v1.0.1-hotfix
git push origin master --tags
# 6. 同步回开发分支,避免下次合并冲突/代码丢失
git checkout develop
git merge master
git push origin develop关键要点
① 为什么从稳定分支拉,而不是直接在 develop 上修
- develop 上可能混着未验证的功能,直接上线会把它们一起带上去;
- hotfix 分支只包含修复,最小变更、最快上线。
② 修完必须同步回 develop
线上 bug 通常 develop 也存在,不同步回去,develop 合并上线时 bug 会"复活"或冲突。
③ 用 --no-ff 保留合并历史
--no-ff 生成合并提交,hotfix 记录清晰,方便回溯(哪些版本包含该修复)。
④ 打 tag 标记发布版本
线上出问题能快速确认"这个版本有没有这个修复"。
加分点
- 修复后补回归测试和测试用例,防止复发;
- 若修复涉及配置/数据,走发布审批 + 灰度流程;
- 如果线上版本和 develop 差异很大,
git cherry-pick <commit>只挑修复提交到 hotfix; - 常见反模式:直接在 master 上改、改完不合并回 develop、hotfix 夹带私货。
一句话总结
从线上稳定分支拉 hotfix 分支 → 最小改动修复 → 测试后 --no-ff 合并回 master 并打 tag 发布 → 再同步回 develop,保证线上快速止血且代码不丢失。