💻第13节:Git Stash 临时保存更改 —— 多任务切换与上下文管理的利器
👽引言:灵活保存未提交改动,提升开发效率
在日常开发中,我们常常会遇到这样的场景:
- 正在开发一个功能,突然需要切换到另一个分支修复紧急 bug;
- 修改了一部分代码,但尚未完成,无法提交;
- 想保留当前工作状态,又不想创建一次不完整的提交;
Git 提供了一个非常实用的命令:git stash
,它可以帮助你将当前工作区和暂存区的修改保存到栈中,并在后续恢复使用。
通过 git stash
,你可以:
✅ 在不提交的情况下保存当前工作进度
✅ 实现多个分支之间的快速切换
✅ 避免因未完成的修改而中断流程
✅ 管理多个“草稿”式的修改集合
本节课老曹将带你全面掌握:
✅ git stash save
/ git stash push
:保存当前修改
✅ git stash apply
/ git stash pop
:恢复最近或指定的修改
✅ git stash list
:查看所有保存的 stash 记录
✅ git stash drop
/ git stash clear
:删除 stash
✅ 使用命名 stash、apply 指定 stash、stash 分支切换等高级用法
✅ 实战演练完整的工作流切换案例
✅ 最佳实践与注意事项
✅ 10大高频面试题(含答案)
❓一、什么是 Git Stash?
1. 基本概念
git stash
是一种轻量级的临时存储机制,用于保存当前工作目录和暂存区中的修改内容,类似于“剪切板”或“暂存箱”。
这些修改不会出现在任何提交历史中,仅存在于本地的 stash 栈中。
2. 工作原理图示
Working Directory
↓ git stash save
Stash Stack (临时存储)
↓ git stash apply
Working Directory
✅ stash 不会影响已提交的内容,只影响未提交的修改。
🌂二、常用命令详解
✅1. 保存当前修改
方法一(旧语法):
git stash save "WIP: login validation"
方法二(新语法):
git stash push -m "WIP: login validation" .
可以指定路径如
src/login.js
,只 stash 部分文件。
✅2. 查看所有 stash 记录
git stash list
输出示例:
stash@{0}: On feature/login: WIP: login validation
stash@{1}: On main: fix: typo in README
✅3. 恢复最近一次 stash
git stash apply
或带编号恢复:
git stash apply stash@{1}
✅4. 恢复并删除 stash(pop)
git stash pop
相当于 apply + drop
。
✅5. 删除 stash
git stash drop stash@{1}
清空所有 stash:
git stash clear
🥕三、高级用法与技巧
✅ 场景一:跨分支保存与恢复
你正在 feature/login
分支上开发,想切换到 main
分支处理问题,但有未提交的改动:
git stash save "WIP: login form"
git checkout main
... 做完操作后 ...
git checkout feature/login
git stash apply
✅ 场景二:保存特定文件的修改
git stash push -m "Only styles" src/styles.css
✅ 场景三:查看 stash 内容差异
git stash show -p stash@{0}
显示具体修改内容。
✅ 场景四:应用 stash 并解决冲突
如果当前工作区已有改动,可能产生冲突:
- 手动编辑冲突文件;
- 添加已解决的文件;
- 继续操作(无需额外命令);
🌙四、实战演练:多任务切换完整流程
场景描述
你正在开发 feature/cart
上的功能,已经写了部分代码但未完成。此时收到通知需紧急修复 main
分支上的 bug。
✅步骤 1:保存当前工作
git stash save "WIP: cart logic"
✅步骤 2:切换到 main 分支
git checkout main
✅步骤 3:拉取最新代码并修复 bug
git pull origin main
... 修改代码 ...
git add .
git commit -m "fix: critical bug in payment flow"
git push origin main
✅步骤 4:切换回原分支并恢复修改
git checkout feature/cart
git stash apply
继续开发!
🥧五、最佳实践与注意事项
✅ 不要把敏感信息留在 stash 中太久,避免遗忘
✅ 定期清理不再需要的 stash,保持栈干净
✅ 使用有意义的 stash 描述信息,便于后期识别
✅ 结合 git diff 或 git stash show 查看 stash 内容
✅ stash 不适用于大项目长期保存,建议提交到临时分支
✅ stash 后再次切换分支前请确保 stash 已恢复或删除
⚡六、10大高频面试题(含答案)
✅ Q1: git stash
的作用是什么?
答:
git stash
用于临时保存当前工作区和暂存区的未提交修改,以便切换上下文或分支而不丢失进度。
✅ Q2: git stash save
和 git stash push
有什么区别?
答:
save
是旧写法,已被 push
替代。push
支持更多选项,如 -m
添加描述、指定路径等。
✅ Q3: 如何查看所有 stash 记录?
答:
使用命令:
git stash list
✅ Q4: 如何恢复某个具体的 stash?
答:
使用:
git stash apply stash@{n}
其中 n
是 stash 列表中的索引号。
✅ Q5: git stash apply
和 git stash pop
的区别是什么?
答:
命令 | 行为 |
---|---|
apply | 恢复 stash 内容,保留记录 |
pop | 恢复并删除 stash 记录 |
✅ Q6: 如何只 stash 某些文件?
答:
使用 push
指定路径:
git stash push -m "Only styles" src/styles.css
✅ Q7: 如何查看 stash 的具体内容?
答:
使用:
git stash show -p stash@{0}
✅ Q8: stash 是否会被推送到远程仓库?
答:
不会。stash
是本地存储,不会随 git push
推送。
✅ Q9: 如何删除某个 stash?
答:
使用:
git stash drop stash@{1}
✅ Q10: stash 能否用于长期保存代码?
答:
不推荐。stash
更适合短期保存未提交的改动。长期保存应使用临时分支或提交。
📚七、总结
本节课我们深入讲解了 Git Stash 的核心用法与实战技巧:
✅ git stash save
/ git stash push
:保存未提交的改动
✅ git stash apply
/ git stash pop
:恢复 stash 并选择是否删除
✅ git stash list
:查看所有保存的 stash
✅ git stash drop
/ git stash clear
:管理 stash 存储
✅ 结合实际开发场景进行多任务切换演练
✅ 最佳实践与注意事项
✅ 10大高频面试题解析
通过掌握 git stash
,你可以:
- 安全地保存未完成的改动;
- 实现多任务快速切换;
- 避免因上下文切换导致的代码丢失;
- 提升开发效率与协作流畅度;
下一讲我们将进入《第14节:Git Hooks 本地钩子》,学习如何配置 pre-commit
、post-commit
等钩子实现自动化检查,构建更智能的提交流程。
附录:推荐资源
📘 Git 官方文档 - Git Stash
🧰 Git Cheat Sheet(中文版)
📊 [VSCode Git 插件支持 stash 图形化操作]
🎯 下一步建议:尝试故意制造一些未提交的改动,练习使用 git stash
进行保存与恢复,熟悉各种应用场景。下一讲我们将深入讲解 Git Hooks 的使用技巧,敬请期待!