【问题标题】:What's the difference between git stash save and git stash push?git stash save 和 git stash push 有什么区别?
【发布时间】:2017-11-24 14:09:11
【问题描述】:

什么时候应该使用git stash save 而不是git stash push,反之亦然?

【问题讨论】:

  • git stash push 是命令吗?你可以showlistdroppop/apply 和你提到的save。但是要推送存储,我会分支并提交,然后 push 新分支到远程。
  • 文档似乎将git stash pushgit stash save 视为相同的东西,但不完全一样。它没有解释差异(至少,我不明白)。 git-scm.com/docs/git-stash
  • @benhorgen: git stash pushgit stash save 的新同义词,但选项已规范化。您还可以限制隐藏哪些路径(并因此重置),这是 save 无法做到的。

标签: git git-stash


【解决方案1】:

git stash save 接受单个非选项参数 - 存储消息。

git stash push 接受带有选项 -m 的消息,并接受要存储的文件列表作为参数。

【讨论】:

  • 听起来像是对 Git 存储行为的一个很好的补充。但是我没有看到版本 2.11.0 (Apple Git-81) 支持它。你知道什么时候引入的吗?
  • 好像是2.13.1版本才推出的。git-scm.com/docs/git-stash/2.13.0
  • 是否可以公平地说 save 是为了向后兼容而留下的,但最终被 push 取代?
  • @void.pointer 是的,2.16 终于是declared deprecated了。
【解决方案2】:

需要明确的是,从 Git 2.15/2.16(2018 年第一季度)开始,git stash save 已被弃用,取而代之的是 git stash push(尽管 git stash save 目前仍然可用)。

参见Thomas Gummerer (tgummerer)commit c0c0c82commit fd2ebf1commit db37745(2017 年 10 月 22 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 40f1293,2017 年 11 月 6 日)

stash: 标记 "git stash save" 在手册页中已弃用

'git stash push'修复了'git stash save'界面中的一个历史漏洞。
由于“git stash push”具有“git stash save”的所有功能,但用户界面更好、更一致,不推荐使用“git stash save”。

stash:现在删除“stash push”的多余帮助

使用“git stash save”界面,用户可以轻松地 尝试添加一条以“-”开头的消息,即“git stash save” 将解释为命令行参数,并失败。
对于这种情况,我们添加了一些额外帮助,说明如何创建以“-”开头的消息的存储。

对于“stash push”,消息使用-m 标志传递,避免了这种潜在的陷阱。
现在只有以“-”开头的路径规范必须使用“-- --<pathspec>”与命令行参数区分开来。
这在 git 命令行界面中相当常见,在其他情况下我们不会尝试猜测用户想要什么。

因为这种传递路径规范的方式在其他 git 命令中很常见,而且我们不在那里提供任何额外帮助,所以在错误消息中对“git stash push”执行相同操作。


在 Git 2.18(2018 年第二季度)中,命令行补全(在 contrib/ 中)被告知“git stash save”已被弃用(“git stash push”是新世界中的首选拼写)并且确实尽可能不提供 “git stash push”时的补全候补可以。

参见commit df70b19commit 0eb5a4f(2018 年 4 月 19 日)Thomas Gummerer (tgummerer)
(由 Junio C Hamano -- gitster -- 合并到 commit 79d92b1,2018 年 5 月 8 日)

completion:使stash -pstash push -p 的别名

我们将“git stash -p”定义为“git stash push -p”的别名 手册页。在完成脚本中执行相同的操作,因此所有选项 可以给 'git stash push' 正在完成时用户 使用“git stash -p --<tab>”。
目前,用户将获得的唯一附加选项是“--message”,但未来可能会有更多选项。


命令行补全脚本(在contrib/中)试图补全“git stash -p”,好像是“git stash push -p”,但是过于激进,也影响了“git stash show -p”,已更正使用 Git 2.28(2020 年第三季度)。

参见Ville Skyttä (scop)commit fffd0cf(2020 年 5 月 21 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit a8ecd01,2020 年 6 月 9 日)

completion: 不要用 -p 覆盖给定的 stash 子命令

签字人:Ville Skyttä

df70b190 ("completion: make stash -p and alias for stash push -p", 2018-04-20, Git v2.18.0-rc0 -- merge 列在batch #5) 想要确保 "git stash -p <TAB>" 提供与 "git stash push -p <TAB>" 相同的补全,但它是通过强制 $subcommand 为 "push" 来实现的命令行。

这会损害任何可以采用“-p”选项的子命令 --- 即使明确给出了子命令,例如“git stash show -p”,修改后添加的代码会覆盖用户给我们的$subcommand

通过确保默认为“push”仅在尚未提供$subcommand 时发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2013-02-23
    • 2014-03-11
    • 2016-01-04
    • 2012-09-10
    • 2011-02-14
    相关资源
    最近更新 更多