在阅读关于git Reset,Checkout和Revert的this好文章之后,我仍然不太了解某些命令命名与其行为之间的联系。我们来看看下表:
在提交级别,命名行为对应似乎对我来说很好,但是在文件级而不是键入git checkout <some_file>
我宁愿选择git reset <some_file>
因为我们在这里做的是复位。
对于非分段程序,我希望有git unstage <some_file>
之类的东西。更容易理解和更好。
那么,文件级checkout
和unstage
这个奇怪的命名只是一个历史遗产,还是有一些合乎逻辑的原因呢?
答案 0 :(得分:1)
这是历史和Git一般倾向于使一个命令执行五个与逻辑无关的事情的组合,只要这五个事物都使用类似的源代码级别操作。
由于git reset
适用于提交中的索引 - &gt;索引方向,“unstage”是一个索引操作,包括从提交到索引的复制,它被卡在重置命令中。
由于git checkout
确实提交了 - &gt; index - &gt;工作树操作,并将文件恢复为已提交的版本需要提交 - &gt;工作树复制,它被卡在收银台。
(只是特别令人困惑,Mercurial的revert
操作仅影响文件,而Git的git revert
进行新的提交,支持先前的提交,Mercurial调用hg backout
正如两位评论者指出的那样,你可以设置别名,虽然我发现这很适合于标准如此之大的古老谚语:“有很多可供选择的,如果你不喜欢它们中的任何一个,那么你可以自己组成!“)