git stash 是临时储物箱:把未提交改动打包存起来,让工作区恢复干净,便于切分支处理紧急任务,事后再取回继续开发。
核心规则
- 存什么:未提交的改动(已暂存 + 未暂存)
- 默认不存:未跟踪的新文件、
.gitignore 忽略的文件
- 存完工作区会回到
HEAD 状态,可放心切分支
- 数据存在 Git 的栈里(不是删除),随时可恢复
- stash 是仓库级而非分支级,A 分支存的可在 B 分支恢复
常用命令
存改动
git stash # 存已暂存/未暂存(不含新文件)
git stash push -m "登录功能写一半" # 推荐:加注释
git stash -u # 包含新建的未跟踪文件
查看
git stash list # 列出所有 stash(栈结构)
git stash show -p stash@{0} # 查看某次 stash 的具体改动
恢复
git stash pop # 恢复最新一次并删除栈记录(最常用)
git stash apply # 恢复但保留栈记录(多次复用)
git stash pop stash@{1} # 恢复指定记录
删除
git stash drop stash@{1} # 删除指定记录
git stash clear # 清空所有(谨慎)
典型场景
# 1. feature 分支写一半,存档
git stash push -m "登录功能:完成账号校验"
# 2. 切到 main 修紧急 bug
git checkout main
git commit -am "fix: 修复首页崩溃"
# 3. 切回继续
git checkout feature
git stash pop
避坑
| 误区 | 正解 |
|---|
以为 stash 会存新文件 | 必须加 -u 才会包含 untracked |
混淆 apply / pop | apply 保留栈记录,pop 弹出后即删 |
| 把 stash 当备份 | 它是临时栈,长期保存请用 commit |
| 切分支前未 stash 干净 | 修改文件可能触发 checkout 阻断 |