如何只 stash 某个特定文件的改动
stash 指定文件:git stash push -- <文件路径>,可带 -m 写备注;多个文件列多个路径。恢复用 git stash pop 或 git stash show -p 查看内容。
用 git stash push -- <文件路径>:按 pathspec 选择要从工作区回退的改动,其他工作区改动保留;但 stash 的索引快照仍可能包含其他已暂存文件,不能据此保证整个 stash 仅含指定路径。加 -m "备注" 方便日后辨认;多个文件可以列多个路径。
用法
git stash push -- src/config.js # 单个文件
git stash push -m "配置调整" -- src/config.js # 带备注
git stash push -- a.js b.js dir/ # 多个文件/目录
配套操作
git stash list # 看 stash 列表(备注在这里显示)
git stash show -p stash@{0} # 查看内容
git stash pop # 应用最新 stash,成功后删除条目;冲突时保留
git stash apply stash@{1} # 应用指定 stash 但保留条目
想交互式挑选?
git stash push -p # 逐块(hunk)选择要 stash 的改动
比按文件更细——同一个文件里也能只 stash 其中几处改动。-p 默认隐含 --keep-index,会保留已暂存内容;需要时显式评估 --no-keep-index。
常见问题(FAQ)
Q:stash 未跟踪的新文件?
加 -u:git stash push -u -- 新文件路径。未跟踪文件默认不进 stash。
Q:stash 里包含已暂存(staged)的改动吗?
包含。stash 把工作区和暂存区的相关改动一起收走;默认恢复工作区变化但不保证重建原暂存状态;--index 会尝试恢复索引,可能因冲突失败,也须检查其他原已暂存文件。
Q:路径里带特殊字符怎么办?
空格等 shell 特殊字符用引号包住:git stash push -- "src/my file.js"。引号不关闭 Git pathspec 的通配符解释;含字面 *、[ 等名称可用 git --literal-pathspecs stash push -- "路径"。