git做了什么命令" git reset --har"

时间:2013-08-15 16:36:53

标签: git

在我在本地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。

3 个答案:

答案 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 effc2bacommit c4932b0commit f6188dccommit ae0a11ccommit 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选项,这使以前唯一的缩写不唯一。

     

无论此补丁系列是否被接受,在我们的测试套件中使用缩写选项实际上是一个不好的做法,因为这些唯一选项名称不能保证将来保持唯一性。

     

因此,我们不要在测试套件中使用缩写选项。