shorthand 选项不能为 Git 的 stash 命令堆叠是有原因的吗?

Is there a reason that shorthand options can't be stacked for Git's stash command?

在 Unix CLI 世界中有一种模式,其中常用选项被赋予一个字母 shorthand,这些通常可以组合在一起,或者 stacked. rm 命令可以找到一个非常常见的例子,它可以递归地删除目录。这三个命令是等价的:

rm --recursive --force .
rm -r -f .
rm -rf .

Git 有很多子命令,每个都有很多选项。我已经习惯了 Git 允许堆叠其 shorthand 选项以便于使用,就像许多其他编写良好的 CLI 工具一样。例如:

git commit -am 'Create new commit message'

我发现 git stash 至少是一个例外,其中有用选项 --keep-index--include-untracked 的 shorthand 不能堆叠到 -ku:

git stash -k -u  # This works
git stash -ku    # This doesn't

除了没有实施之外,还有其他具体原因吗?还有其他无法堆叠 Git 选项的例子吗?这些例子有具体原因吗?

在 Git 的最新版本中,git stash 是一个 shell 脚本(无论出于何种原因)没有使用 Git 的选项解析器。从 Git 2.22 开始,有一个项目用 C 重写它。C 重写有一个合适的选项解析器。然而,重写直到最近才完成,旧的 shell 脚本版本仍然存在。

git stash -ku 在 Git 2.27 中有效,但在 Git 2.25 中无效。 Git 2.27 是旧 shell 脚本版本真正消失的第一个版本;可能这也是最终切换选项解析的时候。