Git 工作区 stash 和临时分支在保存现场时的区别

文章导读
在开发中途遇到紧急 Bug 时,最推荐的做法是先用 git stash 保存当前未完成的工作现场,再创建临时分支修复 Bug,两者配合使用而非二选一。
📋 目录
  1. 核心区别:stash 与临时分支
  2. 标准实操流程
  3. 冲突处理与验证
  4. 常见风险与清理
A A

在开发中途遇到紧急 Bug 时,最推荐的做法是先用 git stash 保存当前未完成的工作现场,再创建临时分支修复 Bug,两者配合使用而非二选一。

先说结论:stash 用于临时储藏未提交的修改,临时分支用于隔离 Bug 修复环境,标准流程是先 stash 后建分支。

  • 适合:开发任务未提交但需立即切换分支修复紧急问题的场景
  • 重点看:stash 保存的是工作区和暂存区变更,分支是代码隔离的载体
  • 别忽略:恢复现场后需检查冲突,临时分支合并后应及时删除

核心区别:stash 与临时分支

标题提到的两者并非互斥关系,而是不同维度的工具。Stash 是临时栈,分支是历史线。

特性git stash临时分支 (Temporary Branch)
存储位置本地栈区 (不提交)本地分支历史 (可提交)
持久性低 (清理后丢失)高 (合并前永久存在)
适用场景短时切换 (几分钟到几小时)需协作或修复耗时较长
恢复命令git stash popgit checkout

标准实操流程

以下是处理紧急 Bug 的标准命令序列,兼容 main/master 分支习惯:

1. 保存现场:git stash

2. 切换主分支:git checkout main (或 master)

3. 创建临时分支:git checkout -b issue-119

4. 修复并提交:git add . 然后 git commit -m "fix bug"

5. 合并并删除:git checkout main 接着 git merge `--no-ff` -m "merge bug fix" issue-119 最后 git branch -d issue-119

6. 恢复现场:git checkout dev 然后 git stash pop

冲突处理与验证

执行 git status,确认工作区显示干净(nothing to commit, working directory clean)后再切换分支。恢复现场后,再次执行 git status,应能看到之前未提交的文件修改恢复如初。

stash pop 冲突解决步骤:

Git 工作区 stash 和临时分支在保存现场时的区别

git stash pop 提示冲突,不要强制覆盖,按以下步骤处理:

1. 查看冲突文件:git status 显示哪些文件冲突。

2. 手动编辑文件:解决冲突标记(<<<<<<< 等)。

3. 标记解决完成:git add .

4. 清理 stash 记录:冲突解决后,stash 记录仍保留在列表中,需手动删除 git stash dropgit stash drop stash@{0}

使用 git stash list 检查,若使用 pop 命令且无冲突,列表中应不再显示该条 stash 记录;若冲突解决后,需确认列表已清理。

常见风险与清理

1. 忘记删除临时分支:临时分支合并后若不删除,会导致分支列表杂乱,建议合并后立即执行 git branch -d 删除。

2. 误删未保存的现场:stash 内容若未 apply 或 pop 就被 drop 或清理,修改将丢失。重要修改建议先 commit 到临时分支再切换,而非仅依赖 stash。

3. 误以为 stash 是提交:stash 只是临时储藏,不会生成 commit 哈希,重启或清理后可能丢失,不能作为永久备份。

4. 分支命名习惯:新仓库默认主分支可能是 main 而非 master,执行切换前请用 git branch 确认主分支名称。