Git Stash:开发者的“临时储物柜”

5 阅读4分钟

在日常开发中,你是否遇到过这样的场景:

  • 正在写一个功能,还没写完,但突然要修复一个紧急 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
# 继续刚才的工作

你会发现,开发流程变得更加流畅了 🚀