git restore、reset和git checkout之间的区别是什么?

3
为了将项目从暂存区恢复,我们使用git reset filename或git reset .。但是,在执行git status后,git也会给我一个提示(如下所示)。
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

这也是从暂存区中移除文件的一种方法。

另外,为了撤销更改,有一个已知的命令。

git checkout filename

然而,可以使用 git restore 文件名 来达到相同的效果。

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


4
这个问题是否得到了回答?“git restore”命令是什么,与“git reset”命令有何区别?(参考链接:https://dev59.com/8VMH5IYBdhLWcg3w1j31) - Dev-vruper
我已经添加了更多的解释,而那个答案并没有回答为什么GitHub在推动或鼓励使用git restore - Jatin Mehrotra
1
这个问题与GitHub无关。如果你的问题实际上是关于GitHub的,或许可以引用一些相关的内容并提供GitHub的链接,以便讨论你所质疑的问题。目前这个问题展示了Git生成的消息,而这些消息已经在链接的问题中得到了回答。 - grg
请注意,git restore 在很大程度上是“git checkout 的一半”。另一半在 git switch 中:这两个新命令在 Git 2.23 中作为一个实验引入,旨在将过于复杂的 git checkout 命令拆分为两个更简单、更易于使用的命令。VonC 在链接问题中的回答提供了更多的历史信息(包括 git restore 中的一个重要错误修复)。 - torek
1个回答

6

将工作树版本的文件还原为匹配索引版本是git checkout可以执行的众多操作之一(取决于你给它的参数)。

将索引版本的文件还原为匹配HEAD提交版本的文件是git reset可以执行的众多操作之一(取决于你给它的参数)。它不同于上面的checkout用法,因为一个更改索引,另一个更改工作树。(还有其他的checkout操作也会影响索引;这是导致下一个问题的一部分...)

git restore是一个相对较新的命令,它将这些功能组合在一起,并将它们与其他命令不相关的功能进行“取消分组”。文档推荐使用它,因为它是覆盖它所涵盖的操作的更清晰、更新的方式。这个操作是等价的;只是新的瓷器使得git更易用。

我不知道github与使用其中一个命令或另一个命令有什么关系。如果你认为他们在某种程度上推动restore而非其他命令,那么无论如何,他们都是正确的,因为正如上面所述,这是执行这些操作的现代方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接