如何撤销 Git 提交?


#1

我在本地不小心 git commit 错了文件,还没有 push 到远端服务器,怎么才能撤销或者回滚提交?

非常感谢!


#2
$ git commit -m "不小心弄错的代码"                             (1)
$ git reset HEAD~                                           (2)
<< 这时文件已经处于 unstaged 状态,可以重新进行编辑 >>             (3)
$ git add ...                                               (4)
$ git commit -c ORIG_HEAD                                   (5)

说明

  1. 想要撤销的提交
  2. 这一步不会修改你已提交的文件,但是会撤销 git commit 这一步的影响,最后形成的状态为 unstaged 。下次如果再重新提交的时候需要重新 git add 将它们变为 staged 的状态。如果你仅仅是想在上一个提交中添加更多的改动,或是更改 commit message,那么你可以使用 get reset --soft HEAD~ , 作用和 git reset HEAD~ 类似,但是会将已有的改动变为 staged 的状态。
  3. 对本地文件重新改动
  4. 使用 git add 添加你想提交的文件
  5. 使用之前的 commit message 重新提交。reset 命令会将旧的 head 保存到 .git/ORIG_HEAD ,提交时指定 -c ORIG_HEAD 会打开编辑器,并加载之前老的提交信息,允许最终提交之前在此基础上进行编辑。如果你不需要重新编辑,可以直接使用 -C 参数。

备注

如果你只是 commit message 写错了,可以直接 git reset, 然后 git commit --amend, 这样会将之前的提交信息预加载到编辑器中,允许你重新修改提交信息。注意如果你在提交之后又做过新的改动,那么 commit --amend 会把新改动也改到上一次提交中。


#3

卧槽!!!!居然没有做关键字的屏蔽?不怕被河蟹吗