2-7 情景四:来了新任务,旧的代码要保存怎么办?rebase&stash命令
场景描述
你正在开发功能 A,写到一半突然被要求先处理紧急任务 B。此时功能 A 还没写完不想提交,但需要切换到另一个分支去处理 B。
方案一:git stash(推荐)
stash 将当前工作区的未提交修改暂存起来,工作区恢复到干净状态。
# 暂存当前修改
git stash save "功能A开发中"
# 查看所有暂存
git stash list
# 切换分支处理紧急任务
git checkout -b hotfix/urgent-task
# ... 处理完毕,提交并推送
# 切回原来的分支,恢复暂存
git checkout feature/task-a
git stash pop # 恢复并删除暂存
# 或
git stash apply stash@{0} # 恢复但保留暂存
bash
方案二:git rebase
rebase(变基)用于整理提交历史,将当前分支的提交"重新播放"到目标分支之上。
# 基本用法
git checkout feature/task-a
git rebase main
# 如果有冲突,解决后继续
git add .
git rebase --continue
# 放弃变基
git rebase --abort
bash
rebase vs merge
| 维度 | merge | rebase |
|---|---|---|
| 历史 | 保留分支合并记录 | 线性历史,更干净 |
| 冲突 | 一次性解决 | 可能需要多次解决 |
| 安全性 | 不会改变已有提交 | 会重写提交历史 |
| 适用 | 合并公共分支 | 整理个人分支 |
rebase 的黄金法则
永远不要对已经推送到远程的公共分支执行 rebase。 rebase 会重写提交历史,如果其他人已经基于这些提交工作,会导致严重问题。
参考资源
↑