在我在本地git分支上按Enter之前我错过了tab键,我最终执行了:
git reset --har
与预期的
相比git reset --hard
通常git在运行看似错误的命令时会抱怨。我查看了--help for git reset,发现没有“h”,“a”,“r”的参数。
似乎已经运行了硬重置,它实际上运行了什么?或者如果它运行“ - 硬”为什么?
其他信息: sylvesterjakubowski $ git --version git version 1.7.12.4(Apple Git-37)#on mountain lion。
答案 0 :(得分:7)
这是根据gitcli
文档页面:
许多命令允许长选项“--option”仅缩写为 他们的唯一前缀(例如,如果没有其他选项的名称 以“opt”开头,你可以拼写“--opt”来调用 “ - 选项”标志),但你应该在写作时完全拼写出来 你的脚本;更高版本的Git可能会引入一个新的选项 name共享相同的前缀,例如“--optimize”,制作一个简短的前缀 曾经独特的不再是唯一的。
同样在同一页上:
支持增强选项解析器的命令接受唯一前缀 一个很长的选项,好像它是完全拼写出来的,但是用一个 警告。例如,git commit --amen就像你输入git一样 commit --amend,但只有在Git的更高版本之后才会出现这种情况 引入了另一个共享相同前缀的选项,例如`git commit --amenity“选项。
所以是的,它跑了git reset --hard
答案 1 :(得分:3)
它没有运行相当于-h -a -r
,因为前面有两个破折号,而不是一个破折号。
Git可能在这里实现了一种算法,允许您对长标志名称使用最短的唯一匹配。由于git reset
没有长标记以--har
开头,因此它可以将请求视为明确的并继续运行git reset --hard
。
答案 2 :(得分:0)
根据您的使用情况,不要依赖于parse-options API提供的缩写选项名称,以保护您免受该选项的缩写形式的影响。分享相同 前缀已添加。
请参见commit b02e7d5(2019年4月12日)以及commit effc2ba,commit c4932b0,commit f6188dc,commit ae0a11c,commit 7076e44,{{3} },commit f927ae6(2019年3月25日)通过commit dd605e4。
(由Johannes Schindelin (dscho
)在Junio C Hamano -- gitster
--中合并,2019年4月22日)
tests
:不允许使用缩写选项(默认情况下)Git的命令行解析器支持唯一缩写的选项,例如
git init --ba
会自动将--ba
扩展到--bare
。对于Git用户而言,这是日常生活中非常方便的功能,尤其是在无法完成制表符的情况下。
但是,在Git的测试套件中依靠它并不是一个好主意,因为今天是命令行选项的唯一缩写,明天可能不再是唯一的缩写。
例如,如果将来的贡献添加了新的模式
git init --babyproofing
,并且先前引入的测试用例使用了git init --ba
扩展为git init --bare
的事实,那么将来的贡献现在就必须触摸看似无关的测试只是为了防止测试套件失败。因此,默认情况下,我们不允许测试套件中的缩写选项。
例如:
测试(
rebase
):拼写--keep-empty
选项该测试希望使用
git rebase
选项运行--keep-empty
,但是 它实际上只说明了--keep
并信任Git的选项解析为 确定这是实物期权的唯一缩写。但是,Denton Liu贡献了commit 39e4773,引入了一个名为
git rebase
的新--keep-base
选项,这使以前唯一的缩写不唯一。无论此补丁系列是否被接受,在我们的测试套件中使用缩写选项实际上是一个不好的做法,因为这些唯一选项名称不能保证将来保持唯一性。
因此,我们不要在测试套件中使用缩写选项。