首页/开发/Git 与协作速查/git stash -u 纳入未跟踪文件
Git 基础与命令88 条

git stash -u 纳入未跟踪文件

扩展入栈范围:-u 连未跟踪文件一起保存,-a 连被忽略文件也纳入,-k 在保存时保留暂存区状态。

Git 与协作速查开发更新于 2026-10-13

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
  • 栈条目长期不用时及时清掉,避免堆积成一堆无主改动

易错点

  • -a 会把构建产物等忽略文件一并装进栈,栈体积膨胀,恢复时还可能覆盖已生成的产物
  • -k 只影响保存瞬间的暂存区划分,恢复时仍按栈内记录还原,别指望它能改变之后的行为
  • 忘记加 -u 后切分支,新文件会跟着进入其他分支的工作区,容易误提交
  • 把 stash 当长期保存手段,栈条目过多且不带说明信息,事后很难分辨哪条对应哪个任务
  • 在冲突未处理干净时 stash,恢复时要重新面对同样的冲突,先处理再入栈更省事

数据来源与参考

  • Git 官方文档:git-stash(-u/-a/-k)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌