git stash save 和 git stash push有什么区别?

📅 2026/8/14 8:51:10
git stash save 和 git stash push有什么区别?
直接说结论git stash save和git stash push功能几乎一样但save已被官方标记为“废弃deprecated”现在一律推荐用push。两者的核心区别在于参数解析方式push更安全、更严格。一、用法对比重点看区别1、基本用法两者完全等价# 旧写法 git stash save 修复登录bug # 新写法推荐 git stash push -m 修复登录bug如果只是存全部改动这俩没区别但push的-m更符合 Git 其他命令的习惯如commit -m。2、指定文件路径这是最大的坑这是你刚才问的“只 stash 个别文件”的场景必须用push# ✅ 正确写法推荐 git stash push -m 暂存配置 -- config.yml # ❌ 危险写法不推荐容易出错 git stash save 暂存配置 config.yml为什么git stash push强制使用--分隔符明确区分“消息”和“文件路径”永远不会混淆。git stash save没有​--分隔符。Git 会尝试把后面的参数解析为消息如果文件名看起来像参数比如以-开头或者解析逻辑有歧义就会报错或产生非预期行为。3、交互式 Stash部分代码# 两者都支持 -p git stash save -p git stash push -p功能一样但push是未来的标准。二、为什么 Git 官方要废弃save在 Git 2.16 版本之后官方引入了git stash push来取代save主要原因是API 一致性​ 和安全性参数歧义save命令会把第一个非选项参数之后的所有内容都当成 stash 消息除非你非常小心否则很容易把文件名误当成消息或者把消息误当成文件。命令统一性Git 的大多数命令如git commit -m,git tag -m都使用-m来指定消息。push沿用了这一风格降低了学习成本。路径规范Pathspecpush强制要求--来分隔消息和路径这是 Git 处理文件路径的标准方式避免了各种边缘情况的 Bug。三、速查对照表需求git stash save(旧/不推荐)git stash push(新/推荐)存全部改动git stash save msggit stash push -m msg存指定文件​git stash save msg -- file(容易混淆)git stash push -m msg -- file(清晰安全)存部分代码块git stash save -pgit stash push -p包含未跟踪文件git stash save -ugit stash push -u存已暂存内容git stash save --stagedgit stash push --staged四、结论与建议新操作一律用git stash push特别是当你需要指定文件路径时push的--分隔符能避免 99% 的意外错误。旧脚本如果用了save也不用急着改目前 Git 仍然兼容save只是会在命令行里提示你这是废弃用法deprecated。但在编写新脚本或文档时请务必使用push。记忆口诀把stash当成commit来记——commit用-m写消息stash现在也用-mcommit后面加文件名要用--stash push后面加文件名也要用--。一句话总结git stash save是“老黄历”git stash push是“新标准”。为了不给自己挖坑忘掉save只用push。