stash 的扩展范围是什么
默认的 git stash 只保存已跟踪文件的改动,新写的文件会被留在工作区,跟随你切到别的分支。加上 -u 可以把未跟踪文件一起入栈,-a 连被忽略的文件(如构建产物)也纳进去,-k 则让保存的瞬间保留暂存区原状。理解这几个参数的差别,能避免「切分支后多了几个不认识的文件」这类常见混乱。
基本信息
| -u / --include-untracked | 未跟踪文件一并入栈 |
|---|---|
| -a / --all | 连被忽略的文件也入栈 |
| -k / --keep-index | 保存时保留暂存区原状 |
| 查看 | git stash show -u -p stash@{0} |
| 平台 | 任意 Git 客户端 |
典型使用场景
- 切分支前把新写的草稿文件一起收走,避免污染其他分支
- 临时处理紧急缺陷,把当前全部改动(含新文件)暂存起来
- 想让暂存的改动保持可提交状态,用 -k 保留暂存区分层
- 查看栈内条目包含哪些新文件,确认没有遗漏
- 调试过程中反复切换上下文,用命名栈条目便于识别
- 清理工作区前先入栈一份,留出回退余地
常用示例
常用示例
git stash push -u -m 'wip incl. new files' # 连未跟踪文件
git stash push -a # 连忽略文件也入栈
git stash push -k # 保留暂存区原状
git stash list # 查看栈内条目
git stash show -u -p stash@{0} # 查看详情含新文件
git stash pop # 恢复并出栈三种范围参数
| 参数 | 覆盖范围 |
|---|---|
| (默认) | 已跟踪文件的改动 |
| -u | 再加未跟踪文件 |
| -a | 再加被忽略的文件 |
切分支前把新文件一起 stash,可以避免未跟踪文件跟着进入其他分支的工作区,这是 -u 最实用的场合。
-a 会把构建产物等忽略文件也装进栈,栈体积变大且恢复后可能覆盖同名产物,多数情况下产物更适合直接清理。
入栈前后的核对动作
- 入栈前 git status 看清改动范围,确认是否含新文件
- 用 -m 写清这条栈条目对应哪个任务
- 恢复时先 git stash show -u -p 看内容再 pop
- 栈条目长期不用时及时清掉,避免堆积成一堆无主改动