在日常开发中,你是否遇到过这样的场景:
- 正在写一个功能,还没写完,但突然要修复一个紧急 Bug;
- 切换分支时,提示“工作区有未提交的更改”,无法切换;
- 想拉取远程最新代码,但本地有修改,怕冲突? 这时候,git stash 就是你最好的朋友。它就像一个 临时储物柜,让你把当前的修改“藏起来”,等需要时再取出来继续工作。
本文将带你全面掌握 git stash 的使用,提升你的 Git 操作效率。
🧩 什么是 git stash?
git stash 是 Git 提供的一个命令,用于 临时保存当前工作区和暂存区的修改,而不提交(commit)。执行后,你的工作区会变干净,可以自由切换分支、拉取代码或修复 Bug。
stash 完后,你可以:
- 恢复修改继续工作;
- 丢弃临时保存的内容;
- 在其他分支上应用这些修改。
🚀 基本用法:三步走
1. 📦 保存当前修改
git stash
这条命令会:
- 保存工作区和暂存区的修改;
- 还原工作区到最近一次提交的状态。
💡 提示:你也可以加一个备注,方便后续识别
git stash save "正在开发用户登录模块"
2. 🔍 查看 stash 列表
git stash list
输出示例:
stash@{0}: On main: 正在开发用户登录模块
stash@{1}: On dev: 修复样式问题
stash@{0} 是最近一次保存的,类似栈结构(后进先出)。
3. 🔄 恢复修改
方式一:恢复最近一次 stash(不删除记录)
git stash apply
方式二:恢复并删除 stash 记录
git stash pop
✅ 推荐使用 pop,用完就删,避免堆积。 恢复指定 stash
git stash apply stash@{1}
🛠 实用进阶命令
1. 📁 保存时包含未跟踪文件
默认 git stash 不会保存新创建的文件(untracked files)。如果想一并保存:
git stash -u
# 或
git stash --include-untracked
例如:你刚创建了一个 utils.js 文件,但还没 git add,用 -u 可以一起藏起来。
2. 🗑 删除某个 stash
git stash drop stash@{0}
清空所有 stash:
git stash clear
3. 🆕 从 stash 创建新分支
如果你在一个错误的分支上做了修改,可以用 stash 在正确分支上“复活”代码:
git stash
git checkout main
git stash pop
或者更优雅地:
git stash branch feature-login
这会:
- 创建 feature-login 分支;
- 基于 stash 之前的提交;
- 应用 stash 内容;
- 删除该 stash。
4. 👀 查看 stash 的具体改动
git stash show
查看详细 diff:
git stash show -p
🎯 典型使用场景
✅ 场景1:紧急修复 Bug
# 正在开发功能A,未完成
git stash save "功能A进行中"
# 切换到 main 分支修复 Bug
git checkout main
git checkout -b hotfix/login-bug
# 修复并提交
git add .
git commit -m "fix: 修复登录页面崩溃"
git push
# 回到原分支,恢复工作
git checkout feature-a
git stash pop
✅ 场景2:拉取最新代码
git stash
git pull origin main
git stash pop
避免因本地修改导致 pull 失败。
✅ 场景3:切换项目方向
团队临时调整需求,你刚写的代码可能用不上了?先 stash 起来,等确定后再决定是否恢复。
⚠️ 注意事项
-
stash 不是备份
它是临时的,建议尽快恢复或提交,避免遗忘。
-
stash 不跨仓库
它只存在于本地,不会推送到远程。
-
冲突处理
apply 或 pop 时可能发生冲突,需手动解决,就像合并代码一样。
-
定期清理
用 git stash list 检查是否有“僵尸 stash”,及时 clear。
🌟 小技巧:给 stash 起个好名字
git stash save "[前端] 用户表单验证逻辑"
这样在 list 时一眼就知道是什么内容,提升可读性。
📝 总结
| 命令 | 作用 |
|---|---|
| git stash | 保存当前修改 |
| git stash save "msg" | 保存并添加备注 |
| git stash -u | 包含未跟踪文件 |
| git stash list | 查看所有 stash |
| git stash pop | 恢复并删除 |
| git stash apply | 恢复但保留记录 |
| git stash drop | 删除某个 stash |
| git stash clear | 清空所有 stash |
| git stash branch | 从 stash 创建分支 |
💬 结语
git stash 是每个开发者都应该掌握的高效工具。它不改变你的代码,却能让你在多任务之间灵活切换,避免“提交半成品”或“丢失灵感”。
下次当你想说“等我先把这行代码写完”时,不妨试试:
git stash
# 去做别的事
git stash pop
# 继续刚才的工作
你会发现,开发流程变得更加流畅了 🚀