为什么在git中使用checkout和reset命名进行文件级操作?

时间:2016-03-26 16:32:00

标签: git

在阅读关于git Reset,Checkout和Revert的this好文章之后,我仍然不太了解某些命令命名与其行为之间的联系。我们来看看下表:

enter image description here

在提交级别,命名行为对应似乎对我来说很好,但是在文件级而不是键入git checkout <some_file>我宁愿选择git reset <some_file>因为我们在这里做的是复位。

对于非分段程序,我希望有git unstage <some_file>之类的东西。更容易理解和更好。

那么,文件级checkoutunstage这个奇怪的命名只是一个历史遗产,还是有一些合乎逻辑的原因呢?

1 个答案:

答案 0 :(得分:1)

这是历史和Git一般倾向于使一个命令执行五个与逻辑无关的事情的组合,只要这五个事物都使用类似的源代码级别操作。

由于git reset适用于提交中的索引 - &gt;索引方向,“unstage”是一个索引操作,包括从提交到索引的复制,它被卡在重置命令中。

由于git checkout确实提交了 - &gt; index - &gt;工作树操作,并将文件恢复为已提交的版本需要提交 - &gt;工作树复制,它被卡在收银台。

(只是特别令人困惑,Mercurial的revert操作仅影响文件,而Git的git revert进行新的提交,支持先前的提交,Mercurial调用hg backout正如两位评论者指出的那样,你可以设置别名,虽然我发现这很适合于标准如此之大的古老谚语:“有很多可供选择的,如果你不喜欢它们中的任何一个,那么你可以自己组成!“)