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

10 浏览
0 Comments

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

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

0
0 Comments

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标志传递,避免了这个潜在的陷阱。现在,只有以“-”开头的路径规范需要通过使用“-- --”与命令行参数进行区分。这在git命令行界面中非常常见,我们不尝试猜测其他情况下用户的意图。

- 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 save 或 git stash save -m |

| git stash push -m (消息以“-”开头) | git stash save -m |

| git stash push [--] …​ | N/A(不可行) |

| git stash push --pathspec-from-file= | N/A(不可行) |

| git stash | git stash save |

| git stash -p | git stash save -p |

| git stash -- …​ | N/A(不可行) |

通过这个比较,可以看出save和push之间的显著区别是:

- 使用push可以使用pathspec创建一个部分stash,而save不支持。pathspec可以作为内联参数提供,也可以使用--指定。

- 使用save可以将消息作为内联参数提供,而使用push必须使用-m选项。

0
0 Comments

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命令行界面中非常常见,因此在git stash push的错误消息中也采用了相同的方式。

在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接口上的一个问题,并提供了更好的用户界面。同时,在命令行自动补全脚本中也对这个变更进行了相应的调整和修复。

0
0 Comments

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来存储文件。

0