这是 Git 多人协作中最经典的「中途紧急切分支修bug」场景,核心解决方案是用 git stash 临时保存未完成的工作,完整操作流程如下(按顺序执行):


✅ 标准解决方案(推荐,无脏提交)

🔹 第一步:临时保存当前dev分支未完成的工作

你现在在dev分支,代码写了一半不想提交,用 git stash 把所有修改临时"藏起来",让工作区恢复干净:

1
2
# 保存当前工作区+暂存区的所有未提交修改,加说明方便后续识别
git stash save "dev分支:用户中心功能开发中,临时保存"

✅ 验证:执行 git status 会显示工作区干净,没有未提交的修改了。

1
2
3
# 查看所有stash记录,能看到你刚才保存的内容
git stash list
# 输出类似:stash@{0}: On dev: dev分支:用户中心功能开发中,临时保存

🔹 第二步:创建bug修复分支(⚠️ 关键:从干净的主分支拉,不要从dev拉!)

绝对不要从当前的dev分支创建bug分支——dev分支有未上线的开发代码,会把未完成的代码带到bug修复分支里!

1
2
3
4
5
6
7
8
# 1. 先切换到干净的线上主分支(main/master,看你们团队的主分支名)
git switch main

# 2. 拉取主分支最新代码,确保是线上最新状态
git pull origin main

# 3. 基于最新的主分支,创建bug修复分支
git switch -c issue-101

🔹 第三步:修复bug,完成提交合并

1
2
3
4
5
6
# 1. 修复bug后,正常提交
git add .
git commit -m "fix: 修复101号bug,xxx问题"

# 2. 推送到远程,提PR合并到主分支
git push -u origin issue-101

PR评审通过合并到主分支后,bug修复流程完成。


🔹 第四步:回到dev分支,恢复之前未完成的工作

1
2
3
4
5
6
7
8
# 1. 切回dev分支
git switch dev

# 2. 恢复刚才stash保存的工作(恢复后会自动删除stash记录)
git stash pop

# 👉 如果想恢复但保留stash记录(比如要多次恢复),用这个:
# git stash apply stash@{0}

✅ 执行完后,你之前写了一半的代码会完整恢复,继续开发即可!


📌 细节补充&避坑

1. stash 常用补充命令

1
2
3
4
5
6
7
8
# 查看某个stash的具体修改内容
git stash show stash@{0} -p

# 丢弃某个不需要的stash
git stash drop stash@{0}

# 清空所有stash记录
git stash clear

2. 恢复stash时出现冲突怎么办?

如果恢复的时候,dev分支的代码和stash的代码有冲突,Git会提示冲突,和解决合并冲突一样:

  • 手动修改冲突文件
  • git add 冲突文件 标记解决
  • 不需要commit,冲突解决完就可以继续开发了

📌 备选方案(不想用stash的情况)

如果不想用stash,也可以做临时提交,之后撤销:

1
2
3
4
5
6
7
8
# 1. 在dev分支,临时提交未完成的代码
git add .
git commit -m "temp: 临时保存,未完成"

# 2. 去修bug,流程和上面一样...

# 3. 回到dev分支,撤销临时提交(代码还在,只是撤销了提交)
git reset --soft HEAD~1

✅ 效果和stash一样,缺点是会多一条临时的脏提交,不如stash干净。


⚠️ 新手最容易踩的坑

❌ 错误做法:直接从dev分支创建issue-101分支
→ 会把dev里未上线的开发代码带到bug分支,合并到主分支后会把未完成的代码也带上,造成线上事故!
✅ 正确做法:所有hotfix/bugfix分支,必须从干净的线上主分支(main/master)创建