Git 撤消提交的更改

Git 撤消提交的更改,git,branch,git-commit,git-revert,Git,Branch,Git Commit,Git Revert,我从一本名为Ryan Hodson-Ry的Git教程的书中学习到,它说: 在撤消更改之前,我们需要返回到主分支。如果我们不这样做,我们所有的更新都会出现在某个不存在的分支上。决不能直接对以前的修订版进行更改 这是什么意思 在我的情况下,我处于主分支的顶端,我必须返回到上一个提交这不是我写得最清楚的一段;但经过几次重读,我确信我已经推断出了正确的上下文来理解它的含义。这是我能找到的唯一概念上准确的解释这段话的方法,所以 假设您一直在一步一步地遵循教程,那么您当前处于分离头部状态。当您直接签出提交时

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

在撤消更改之前,我们需要返回到主分支。如果我们不这样做,我们所有的更新都会出现在某个不存在的分支上。决不能直接对以前的修订版进行更改

这是什么意思


在我的情况下,我处于主分支的顶端,我必须返回到上一个提交

这不是我写得最清楚的一段;但经过几次重读,我确信我已经推断出了正确的上下文来理解它的含义。这是我能找到的唯一概念上准确的解释这段话的方法,所以

假设您一直在一步一步地遵循教程,那么您当前处于分离头部状态。当您直接签出提交时会发生这种情况——通常是因为您在分支的历史记录中签出了提交。例如,如果你有

A -- B -- C <--(master)
然后这会让你处于分离的头部状态。你可以将其表示为

A -- B -- C <--(master)
     ^
    (HEAD)
教程似乎引导您这样做是为了检查更改,现在它确定您要撤消该更改

所以它是说,如果你不先签出主机,然后再进行一次提交,你最终会

A -- B -- C <--(master)
      \
       D 
       ^
       (HEAD)
你仍然处于分离的头部状态,并且从任何引用都无法访问d。正如教程所建议的,这并不总是错误的,但它通常不是正确的。你必须采取进一步措施防止d被丢弃


本教程使用“直接对以前的修订版进行更改”这一短语,但这并不能准确描述您将要做的事情。更准确的说法是,您通常会避免在脱离头部状态时进行新的更改,但作者可能会发现,对于git新手来说,这种措辞太过技术化/混乱。

revert在git中有特定的含义。恢复提交就是创建一个新的提交来撤销第一个提交,例如,它是一个反向补丁。如果您想还原上一次提交,只需执行git revert HEAD。这不同于扔掉之前的提交,它本质上是重写历史,而您的作者建议不要这样做。这一建议值得商榷。你想做什么?@williampersell-我不认为教程最后是在评论还原与重写,而不是在这篇文章中。这似乎是在警告不要在超然的头脑中犯下错误,尽管没有更多的上下文,它不是100%清楚的。@MarkAdelsberger-你的假设是正确的,好的直觉@在您的示例中,MarkAdelsberger-D是一个悬而未决的提交,对吗?不管怎样,谢谢你的回答是的,这是有时使用的术语。这意味着,一旦您将HEAD从D移开,并且HEAD位于D时的reflog条目过期,D就有资格进行垃圾收集。除非,在中间的时间里,你做了一些事情让D可以到达。
A -- B -- C <--(master)
      \
       D 
       ^
       (HEAD)