1. 基础用法
(1) 保存当前修改(默认 stash)
git stash
或(推荐添加描述信息):
git stash push -m "描述信息"
说明:
- 保存当前 工作目录(unstaged changes) 和 暂存区(staged changes) 的修改。
- 默认 stash 名称为
WIP on <branch>(如WIP on main: 123abc Fix bug)。
(2) 查看所有 stash 列表
git stash list
输出示例:
stash@{0}: On main: 临时修复登录问题
stash@{1}: WIP on feature/add-user: 9e8c7d6 临时代码
stash@{n}是 stash 的索引,n从 0 开始(最新 stash 是stash@{0})。On main表示 stash 时的分支名。
(3) 恢复 stash
恢复最新 stash(默认 stash@{0})
git stash pop
pop:恢复并 删除 该 stash(恢复后 stash 列表会减少)。
恢复指定 stash
git stash pop stash@{1}
仅恢复但不删除 stash
git stash apply stash@{1}
apply:恢复但不删除 stash(stash 仍然存在)。
(4) 删除 stash
删除最新 stash
git stash drop
删除指定 stash
git stash drop stash@{1}
删除所有 stash
git stash clear
⚠️ 注意:clear 会 永久删除所有 stash,慎用!
2. 高级用法
(1) 只 stash 未暂存的修改(不 stash staged 文件)
git stash push --keep-index
--keep-index:只 stash 工作目录的修改,不 stash 已git add的文件。
(2) 只 stash 指定的文件
git stash push path/to/file1 path/to/file2
或(使用通配符):
git stash push *.js
- 仅 stash 指定的文件,其他修改保持不变。
(3) 只 stash 已暂存的修改(不 stash 未 add 的文件)
git stash push --staged
--staged:只 stash 已git add的修改,不 stash 未暂存的修改。
(4) 查看 stash 的详细改动
git stash show -p stash@{1}
-p:显示具体代码差异(类似git diff)。- 不加
-p时,仅显示文件变更统计(如2 files changed)。
(5) 从 stash 恢复单个文件
git checkout stash@{1} -- path/to/file
- 仅恢复
stash@{1}中的某个文件,不恢复整个 stash。
(6) 将 stash 转为新分支
git stash branch new-branch-name stash@{1}
- 基于
stash@{1}创建一个新分支new-branch-name,并自动pop该 stash。
3. 常见场景
场景 1:临时切换分支,但不想提交当前修改
git stash # 暂存当前修改
git checkout other-branch
# 处理其他任务...
git checkout main
git stash pop # 恢复暂存的修改
场景 2:误删 stash,如何恢复?
Git 不会自动删除 stash,但如果 git stash clear 了,可以尝试:
git fsck --unreachable | grep commit | awk '{print $3}' | xargs git log --no-walk
查找可能的 stash 提交,然后手动恢复。
场景 3:只 stash 部分修改
git stash push -m "临时保存登录页修改" -- src/login.js
- 只 stash
src/login.js的修改,不影响其他文件。
4. 总结
| 操作 | 命令 |
|---|---|
| 暂存所有修改 | git stash 或 git stash push -m "描述" |
| 查看 stash 列表 | git stash list |
| 恢复最新 stash | git stash pop |
| 恢复指定 stash | git stash pop stash@{1} |
| 恢复但不删除 | git stash apply stash@{1} |
| 删除 stash | git stash drop stash@{1} |
| 清空所有 stash | git stash clear |
| 只 stash 未暂存文件 | git stash push --keep-index |
| 只 stash 已暂存文件 | git stash push --staged |
| 只 stash 指定文件 | git stash push path/to/file |
| 查看 stash 差异 | git stash show -p stash@{1} |
| 恢复单个文件 | git checkout stash@{1} -- path/to/file |
| 转为新分支 | git stash branch new-branch stash@{1} |
掌握这些用法后,你可以更灵活地管理临时修改,避免不必要的提交或丢失代码! 🚀

391

被折叠的 条评论
为什么被折叠?



