文章目录
1.简介
git stash 是一个让你临时保存当前工作区修改的命令。它会把工作区和暂存区的改动保存起来,让代码回到上一次提交的状态(干净的工作区),方便你切换分支处理其他任务。稍后可以再把保存的内容恢复回来继续开发。
核心价值:避免提交半成品代码,又能自由切换分支。
2.格式
bash
git stash list [<log-options>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
git stash drop [-q | --quiet] [<stash>]
git stash pop [--index] [-q | --quiet] [<stash>]
git stash apply [--index] [-q | --quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
[-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
[--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>...]]
git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
[-u | --include-untracked] [-a | --all] [<message>]
git stash clear
git stash create [<message>]
git stash store [(-m | --message) <message>] [-q | --quiet] <commit>
git stash export (--print | --to-ref <ref>) [<stash>...]
git stash import <commit>
3.选项
bash
-a, --all
包含所有文件(包括被 `.gitignore` 忽略的)
-m, --message <message>
添加描述信息
-u, --include-untracked
包含未跟踪的文件
-k, --keep-index
暂存区内容保持不变,只暂存工作区修改
-- <pathspec>
只暂存指定路径的文件
-S, --staged
只暂存暂存区的内容
4.示例
- 基础保存与恢复
bash
# 保存当前修改
git stash
# 查看保存列表
git stash list
# 输出: stash@{0}: WIP on main: 1234567 最后一次提交
# 恢复并删除记录(最常用)
git stash pop
- 保存时添加描述(推荐)
bash
# 带描述保存,便于识别
git stash save "正在开发用户登录功能"
# 或使用 push 写法
git stash push -m "正在开发用户登录功能"
- 包含未跟踪的文件
bash
# 新建了文件但还没 add,默认 stash 不会保存
git stash -u # 包含未跟踪文件
git stash -a # 包含所有文件(包括 .gitignore 忽略的)
- 紧急修复 Bug 场景
bash
# 1. 在 feature 分支开发到一半
git stash save "feature 开发中"
# 2. 切换到 master 修 Bug
git checkout master
# 修复 Bug、提交...
# 3. 切回 feature,恢复进度
git checkout feature
git stash pop
- 恢复指定的 stash
bash
# 查看所有 stash
git stash list
# stash@{0}: On main: 登录功能
# stash@{1}: On main: 缓存优化
# 恢复指定的 stash(并删除)
git stash pop stash@{1}
# 恢复指定的 stash(保留记录)
git stash apply stash@{1}
- 只暂存部分文件
bash
# 只暂存指定文件
git stash push -m "只存这个文件" -- path/to/file.go
- 查看 stash 内容
bash
# 查看最近一次 stash 的改动摘要
git stash show
# 查看完整 diff
git stash show -p
# 查看指定 stash 的完整 diff
git stash show -p stash@{1}
- 从 stash 创建新分支
bash
# 当 stash 与当前分支有冲突时,可以直接创建新分支
git stash branch new-feature stash@{0}
5.小结
| 场景 | 推荐命令 |
|---|---|
| 保存当前进度 | git stash 或 git stash save "描述" |
| 查看保存记录 | git stash list |
| 恢复并继续 | git stash pop |
| 恢复但保留记录 | git stash apply |
| 丢弃某个记录 | git stash drop stash@{n} |
| 清空所有记录 | git stash clear |
| 包含新文件 | git stash -u |
一句话总结 :git stash = 临时保存 → 切换分支干活 → 恢复继续。用完即走,不污染提交历史。