撤消已提交的更改

Undo committed changes

我从一本书中学习,叫做 Ryan Hodson - Ry 的 Git 教程,它说:

Before we undo the changes, we need to return to the master branch. If we didn’t, all of our updates would be on some non-existent branch. You should never make changes directly to a previous revision.

这是什么意思?

在我的例子中,我在 master 分支的顶端,我必须恢复到之前的提交

这不是 IMO 中写得最清楚的段落;但是在重读了几遍之后,我很确定我已经推断出正确的上下文来理解它的含义。 (这是我能找到的解释这段话的唯一概念上准确的方式,所以...)

如果您一直在逐步按照教程进行操作,那么您目前可能处于 "detached HEAD state"。当您直接签出提交时会发生这种情况 - 通常是因为您已经签出分支历史中更早的提交。例如,如果您有

A -- B -- C <--(master)

然后你检查 B 提交,通过说

git checkout master^

然后这会使您处于分离 HEAD 状态。您可以将其表示为

A -- B -- C <--(master)
     ^
    (HEAD)

教程似乎引导您执行此操作以检查更改,现在它确定您要撤消该更改。

也就是说,如果您先检查主机,然后再进行一次提交,您最终会得到

A -- B -- C <--(master)
      \
       D 
       ^
       (HEAD)

你仍然处于分离 HEAD 状态,并且 D 不会成为任何参考的 "reachable"。这并非 总是 错误(如教程所建议的),但它通常不正确。您必须采取进一步措施来防止 D 被丢弃。

本教程使用短语 "make changes directly to a previous revision",但这并不是对您将要执行的操作的准确描述。更准确地说,您通常会避免在处于分离 HEAD 状态时进行新的更改(但作者可能发现 technical/confusing 对于 git 新手来说,这种措辞太过分了。