首页 > 解决方案 > git restore、reset 和 git checkout 之间的区别?

问题描述

为了从暂存区恢复项目,我们使用git reset filename or git reset .

但是 git 在我做之后也会给我一个提示(如下所述)git status

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

这也是从暂存区取消暂存文件。

此外,为了恢复更改,还有已知命令

git checkout filename

然而,同样可以使用git restore filename

它们之间的根本区别是什么?以及为什么 git 推动使用 git restore

标签: gitgithub

解决方案


恢复文件的工作树版本以匹配索引版本是git checkout可以做的许多事情之一(取决于你给它的参数)。

恢复文件的索引版本以匹配HEAD提交中的版本是可以做的许多事情之一git reset(取决于你给它的参数)。它与上述用法的不同之处checkout在于,一个更改索引,另一个更改工作树。(还有其他checkout操作也会影响索引;这是导致下一点的问题的一部分......)

git restore是一个相对较新的命令,它将这些功能组合在一起,同时将它们与其他命令所做的不相关的事情“取消组合”。文档推动使用它,因为它是执行它所涵盖的操作的更新、更清晰的方法。操作是等价的;它只是使 git 更可用的新瓷器。

我不知道 github 与使用一个命令或另一个命令有什么关系。如果您认为他们以某种方式restore压倒了其他人,那么出于上述原因,他们无论如何都是正确的——这是执行这些操作的现代方式。


推荐阅读