【问题标题】:Difference between git restore, reset & git checkout? [duplicate]git restore、reset 和 git checkout 之间的区别? [复制]
【发布时间】:2021-02-21 14:17:13
【问题描述】:

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

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

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

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

为了恢复更改,还有一个已知命令

git checkout filename

但是使用git restore filename也可以达到同样的效果

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

【问题讨论】:

  • 我添加了更多解释,但该答案并没有回答为什么 github 会推动或鼓励使用 git restore
  • 这个问题中的任何内容都与 GitHub 无关。如果您的问题实际上是关于 GitHub 的,也许包括一些引用和指向 GitHub 的链接,他们会在其中讨论您所面临的问题。目前这个问题显示了 Git 产生的消息,这些消息在链接到的问题中得到了回答。
  • 请注意,git restore 在很大程度上是“git checkout 的一半”。另一半在 git switch 中:这两个新命令是在 Git 2.23 中引入的,作为将过于复杂的 git checkout 命令拆分为两个更简单/更易于使用的命令的实验。 VonC 在链接问题中的回答提供了更多历史信息(包括git restore 中的一个重要错误修复)。

标签: git github


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2011-07-04
    • 1970-01-01
    • 2020-04-07
    • 2019-03-11
    • 1970-01-01
    • 2011-04-08
    • 2015-11-20
    相关资源
    最近更新 更多