git 之 stash
一、git stash
:临时保存工作区修改
作用
将当前工作目录和暂存区的未提交修改保存到栈中,并恢复工作区到上一次提交的干净状态。
适用场景:
- 临时切换分支修复紧急 Bug
- 拉取远程代码前清理工作区
- 保存实验性代码避免生成无效提交
常用命令:
git stash # 保存修改(默认无描述)
git stash save "修复登录页" # 添加描述性消息
git stash -u # 包含未跟踪文件(新增文件)
git stash -a # 包含所有文件(包括.gitignore忽略的文件)
git stash --patch # 交互式选择部分修改保存
存储机制:
- 保存的修改以栈结构存储(后进先出),可通过
git stash list
查看记录:stash@{0}: On main: 修复登录页 stash@{1}: WIP on dev: 新增搜索功能
二、git stash apply
:恢复保存的修改
作用
将指定 stash
中的修改应用到当前工作目录,但不删除 stash 记录。
适用场景:
- 多次恢复同一份修改(如多分支测试)
- 避免误删重要 stash 记录
常用命令:
git stash apply # 恢复最新保存的修改
git stash apply stash@{1} # 恢复指定 stash(如 stash@{1})
git stash apply --index # 同时恢复暂存区状态(保留原 git add 状态)
关键特性:
- 不自动删除 stash:需手动执行
git stash drop
清理 - 可能冲突:若恢复时工作区有修改,需手动解决冲突
三、git stash apply
vs git stash pop
命令 | 恢复修改 | 删除 stash 记录 | 适用场景 |
---|---|---|---|
git stash apply | 是 | 否 | 需多次复用同一 stash |
git stash pop | 是 | 是 | 恢复后立即清理栈空间 |
示例工作流:
git stash save "临时保存登录页改动" # 保存修改 → 切换到其他分支修复 Bug git checkout hotfix-branch # 修复完成... git checkout main # 返回原分支 git stash apply # 恢复修改(保留 stash 记录) git stash drop # 确认无误后手动删除
四、注意
未跟踪文件需特殊处理:
-
默认不保存未跟踪文件,需添加
-u
或-a
参数。
冲突解决: -
恢复时若冲突,需手动编辑文件 →
git add
→ 继续操作。
长期存储风险: -
Stash 是临时工具,长期未清理的记录易混淆,建议定期用
git stash list
检查并清理。 -
git stash
→ 紧急任务前保存工作现场,避免无效提交。 -
git stash apply
→ 非破坏性恢复,适合需重复使用的场景。 -
git stash pop
→ 一次性恢复并清理,简化操作流程。 -
通过
git stash list
管理记录,结合--index
或-u
精细化控制,可大幅提升多任务开发效率。