撤消已提交的更改
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 新手来说,这种措辞太过分了。
我从一本书中学习,叫做 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 新手来说,这种措辞太过分了。