我做了一个承诺,但现在它是一种很难看到什么我都变了。我可以关闭过程做一个git的差异,但我宁愿撤消最后一次提交,并让我的机智所有的变化,使我的IDE(PyCharm)只是表明我哪些文件已被更改。如何撤消git中的最后一个提交,但保留我的更改为unstaged?
那么,有没有办法撤消上次提交(真的将其删除),但仍保持我的变化机智?欢迎所有提示!
我做了一个承诺,但现在它是一种很难看到什么我都变了。我可以关闭过程做一个git的差异,但我宁愿撤消最后一次提交,并让我的机智所有的变化,使我的IDE(PyCharm)只是表明我哪些文件已被更改。如何撤消git中的最后一个提交,但保留我的更改为unstaged?
那么,有没有办法撤消上次提交(真的将其删除),但仍保持我的变化机智?欢迎所有提示!
这听起来像git reset --soft
工作,他们的帮助(git help reset
)这样说:
--soft
Does not touch the index file nor the working tree at all
(but resets the head to <commit>, just like all modes do).
This leaves all your changed files "Changes to be
committed", as git status would put it.
所以提交被撤销,但文件仍然期待他们之前的方式。没有什么东西上演到索引。
正如彼得说,我会跟git reset --soft
去这应该离开你的这两个指标,在机智工作目录。在你的情况下,如果你想返回1提交,你可以使用git reset --soft HEAD~
指向当前HEAD的父提交的分支;您的索引和工作目录仍将包含您更改的文件。
我想撇下了--soft
在其他两个答案,一个简单的git reset @^
去(或git reset HEAD^
在旧版本的Git),这将默认为git reset --mixed @^
。不同之处在于软重置会使文件进行提交,这不像您想要的那样。如果你真的想撤销提交,你应该也可以取消这些更改,这是默认的做法。在一般情况下,我发现这比软重置更有用,这可能是为什么混合是默认设置。
这应该是被接受的答案 - 更简单,正是OP想要的。 – chetstone
小一点:你真的不永远_remove_从git的历史承诺。相反,你删除指向它们的指针(即分支)。最终他们将被垃圾收集。如果你搞砸了某些东西并想回去,你可以在'reflog'中找到这些悬而未决的提交。 –