这两个命令是 Git 中用于"临时保存和恢复工作进度"的核心功能。简单来说,git stash 负责**"存"** ,而 git stash apply 负责**"取"**。
以下是它们的详细对比和用法:
1. git stash (暂存/保存)
- 作用 :将你当前工作区中未提交的修改(包括已暂存和未暂存的已跟踪文件)临时保存起来,并将你的工作区恢复到干净的状态(与最近一次提交一致)。
- 使用场景:当你正在开发新功能,突然需要切换分支去修复紧急 Bug,但手头的工作还没做完,不想提交一个半成品时。
- 常用命令 :
git stash:快速保存当前修改(默认信息为WIP on branch...)。git stash save "描述信息"或git stash push -m "描述信息":保存修改并添加备注,方便日后查找。git stash -u:将未跟踪的新文件(Untracked files)也一起保存。
2. git stash apply (恢复/应用)
- 作用 :将你之前保存的修改重新应用到当前的工作区中。重点是:它不会删除 stash 列表中的记录 。你可以对同一个 stash 记录多次执行
apply。 - 使用场景:当你处理完紧急 Bug,切回原来的分支,想要恢复之前保存的代码继续开发时。
- 常用命令 :
git stash apply:恢复最近一次保存的修改。git stash apply stash@{n}:恢复指定的某一次修改(n为数字索引,可通过git stash list查看)。
💡 核心进阶:apply vs pop
在实际开发中,提到 apply 就不得不提它的"兄弟"命令 git stash pop。两者的区别非常关键:
| 特性 | git stash apply |
git stash pop |
|---|---|---|
| 恢复代码 | ✅ 将修改应用到工作区 | ✅ 将修改应用到工作区 |
| 删除 stash 记录 | ❌ 保留在 stash 列表中 | ✅ 应用成功后自动删除该记录 |
| 适用场景 | 需要反复应用同一段暂存代码,或不确定应用是否成功时 | 恢复代码后确认无误,不需要再次使用该暂存记录时 |
📝 完整的日常操作流程示例
-
保存进度:
git stash push -m "开发登录功能到一半" -
查看保存列表(确认是否保存成功):
git stash list # 输出示例: stash@{0}: On main: 开发登录功能到一半 -
切换分支去干别的事
git checkout bugfix-branch # ... 修复Bug并提交 ... -
切回原分支并恢复进度
git checkout main git stash apply # 恢复代码,且保留 stash 记录作为备份 -
确认无误后,清理 stash 列表(可选):
git stash drop stash@{0} # 手动删除刚才恢复的记录
总结 :git stash 是你的"代码存档点",而 git stash apply 是"读档但不删存档",如果你希望"读档并删存档",请使用 git stash pop。