Skip to content

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,保证线上快速止血且代码不丢失。

基于 VitePress 重建