git stash save和git stash push有什么区别?
git stash save和git stash push之间的区别是什么?
问题的出现是因为git stash save命令已经被弃用,而git stash push命令被认为更加灵活和符合常规的命令行参数。原因如下:
1. Replacement
git stash push选项在2.13.0版本中引入,以比save命令更常规地提供命令行参数。这种变化的基本原理在Git的提交消息中进行了记录:
- f5727e2:引入了一个新的git stash push命令,以补充git stash save命令。push命令用于从当前的命令行参数过渡到一种更常规的方式,其中消息作为-m选项的参数给出。这使我们能够在命令行参数的末尾使用路径规范,就像其他Git命令一样,这样用户就可以指定要存储的路径子集(并且将其他路径留在原地)。
- c0c0c82:使用'git stash save'接口,用户可以轻松尝试添加以“-”开头的消息,而'git stash save'将将其解释为命令行参数并失败。对于'git stash push',消息通过-m标志传递,避免了这个潜在的陷阱。现在,只有以“-”开头的路径规范需要通过使用“-- --
- fd2ebf1:'git stash push'具有'git stash save'的所有功能,并具有更好、更一致的用户界面。
2. Deprecation
在Git的2.16.0版本中,正式弃用了save命令,并推荐使用push命令。在save命令的文档中解释了其弃用原因。
3. Short form
除了标准形式的命令之外,push还有一个省略push的简短形式。而save命令没有类似的简短形式。
4. Command comparison
通过阅读文档,我认为以下是两个命令的完整比较:
| push命令 | save命令 |
| ------------------------------- | ------------------------------------------------ |
| git stash push | git stash save |
| git stash push -m
| git stash push -m
| git stash push [--]
| git stash push --pathspec-from-file=
| git stash | git stash save |
| git stash -p | git stash save -p |
| git stash --
通过这个比较,可以看出save和push之间的显著区别是:
- 使用push可以使用pathspec创建一个部分stash,而save不支持。pathspec可以作为内联参数提供,也可以使用--指定。
- 使用save可以将消息作为内联参数提供,而使用push必须使用-m选项。
git stash save和git stash push之间的区别是什么?
Git中的git stash命令用于保存当前工作目录的临时状态,以便在切换分支或者应用补丁时能够恢复工作区的修改。其中,git stash save和git stash push是两个常用的子命令。
在Git 2.15/2.16版本中,git stash save已被弃用,推荐使用git stash push。虽然git stash save目前仍然可用,但未来可能会被移除。这个变更是在2017年10月由Thomas Gummerer提交的。
git stash push修复了git stash save接口上的一个历史问题,提供了更好、更一致的用户界面。因此,git stash save被弃用。
使用git stash save时,用户可能会尝试添加以“-”开头的消息,但git stash save会将其解释为命令行参数,导致失败。为了解决这个问题,git stash save提供了一些额外的帮助,告诉用户如何创建以“-”开头的消息的存储。而对于git stash push,消息是通过-m选项传递的,避免了这个潜在的问题。现在,只有以“-”开头的路径规范需要使用“-- --
在Git 2.18版本中,命令行自动补全脚本也意识到了git stash save已被弃用,并将其从可能的补全候选项中移除。相反,它将git stash push作为首选的补全选项。这个变更是在2018年4月由Thomas Gummerer提交的。
最后,在Git 2.28版本中修复了命令行自动补全脚本的一个问题。之前的补全脚本会错误地将“git stash -p”视为“git stash push -p”,这也影响了“git stash show -p”。这个问题在2020年5月由Ville Skyttä修复。
git stash save和git stash push之间的区别是git stash save已被弃用,推荐使用git stash push。这个变更修复了git stash save接口上的一个问题,并提供了更好的用户界面。同时,在命令行自动补全脚本中也对这个变更进行了相应的调整和修复。
git stash save和git stash push之间的区别是什么?
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
取代了吗?
是的,在2.16版本中,它最终被宣布为已弃用。根据Git项目中的提交,自commit db37745以来,我们仍然保留 'git stash save',但更好地指向更现代(更具有功能丰富性)的接口,而不是教给他们可能在未来被淘汰的旧版本。
解决方法:使用git stash push代替git stash save来存储文件。