如何撤消git中的最后一次提交,但保持我的更改为未分级?

kra*_*r65 14 git git-revert git-stage

我做了一个提交,但现在很难看到我改变了什么.我当然可以做一个git diff,但我宁愿撤消最后一次提交并保持我的所有更改,以便我的IDE(PyCharm)只显示我已经更改了哪些文件.

那么有没有办法撤消上次提交(真的删除它),但仍保持我的变化?欢迎所有提示!

Gar*_*ler 14

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

  • @PostImpatica 使用 2 个 `^` 字符让我害怕,因为 `^` 字符堆叠,所以 `@^^` 看起来像是引用了 2 个提交。听起来“^^”在 Windows 中计算为单个“^”,但我可能仍然会养成在该环境中使用“@~1”的习惯,这相当于正常的非 Windows“ ^`,只是为了避免让自己感到困惑。如果你想返回 3,`@~3` 比 `@^^^^^^` 更明显意味着返回 3! (2认同)

Pet*_*ake 10

这听起来像是一份工作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.
Run Code Online (Sandbox Code Playgroud)

因此撤消提交,但文件仍然像以前一样.没有任何东西进入索引.

  • 提交仍然在历史中,但`HEAD`不再指向它.这是一个悬空参考,将被垃圾收集. (2认同)
  • 作为小费; 最后通过`git reset --soft <hash of last commit>`成功了.插入终于解决了它.不管怎么说,还是要谢谢你! (2认同)

Chr*_*ris 8

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

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

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

  • 天啊,伙计,你一个人就解决了这个问题,这应该是被接受和最多支持的答案。如果最后没有“HEAD~”,“git reset --soft”什么也没做。 (3认同)