21

我已经做出了承诺,但现在很难看到我都改变了什么。我当然可以做一个 git diff,但我宁愿撤消最后一次提交并保持我的所有更改都完好无损,以便我的 IDE (PyCharm) 简单地向我显示哪些文件已更改。

那么有没有办法撤消最后一次提交(真正删除它)但仍然保持我的更改完好无损?欢迎所有提示!

4

3 回答 3

23

我会--soft在其他两个答案中省略并使用一个简单的git reset @^(或git reset HEAD^在旧版本的 git 中),默认为git reset --mixed @^. 不同之处在于软重置会使文件暂存以进行提交,这听起来不像您想要做的。如果您真的想撤消提交,您还应该取消暂存更改,这是默认设置。我发现这在一般情况下比软重置更有用,这可能就是为什么混合是默认设置的原因。

于 2014-03-12T15:39:36.130 回答
16

这听起来像是 的工作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.

所以提交被撤消,但文件看起来仍然像以前一样。没有任何东西上演到索引中。

于 2014-03-12T15:10:05.853 回答
11

正如彼得所说,我会选择git reset --soft哪个应该保留您的索引和工作目录。

在您的情况下,如果您想返回 1 个提交,您可以使用git reset --soft HEAD~将分支指向当前 HEAD 的父提交;您的索引和工作目录仍将包含您更改的文件。

关于重置的方便文章:http: //git-scm.com/blog/2011/07/11/reset.html

于 2014-03-12T15:31:01.140 回答