目录

commit之后,觉得commit的内容有问题或者觉得这个commit不如自己愿,想撤销commit,该怎么做?

一般这样我们写完代码后会这样:

//添加所有文件

git add . 

//提交

git commit -m "本功能全部完成" 

但是执行完commit后,想撤回commit,怎么办?

这时候我们可以使用

git reset --soft HEAD^

这样就成功的撤销了你的commit

注意,仅仅是撤回commit操作,您写的代码仍然保留。

说一下个人理解:

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

至于这几个参数:

--mixed:不删除工作空间改动代码,撤销commit,并且撤销git add .操作,这个为默认参数,git reset --mixed HEAD^git reset HEAD^ 效果是一样的。

--soft:不删除工作空间改动代码,撤销commit,不撤销git add .

--hard:删除工作空间改动代码,撤销commit,撤销git add .

注意完成这个操作后,就恢复到了上一次的commit状态。

顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:

git commit --amend

此时会进入默认vim编辑器,修改注释完毕后保存就好了。

还有一种情况,你已经提交到远端了,该怎么办。

首先,通过git log查看提交信息,以便获取需要回退至的版本号:

commit a500e6b5f634ff56408982c6e2dfbc4ca49b84e6 (HEAD -> master, origin/master, origin/HEAD)
Author: Flicker <libmi@foxmail.com>
Date:   Sat Feb 23 16:16:26 2019 +0800

    add eureka provider

commit 6fcebc3d862169a839469f522a7097b97d959a16
Author: Flicker <libmi@foxmail.com>
Date:   Thu Feb 21 16:45:20 2019 +0800

    update git ignore.

我们要撤销最新的一次提交,所以需要回退至的版本号是:6fcebc3d862169a839469f522a7097b97d959a16。

然后,通过git reset –-soft <版本号>重置至指定版本的提交,达到撤销提交的目的:

git reset --soft 6fcebc3d862169a839469f522a7097b97d959a16

参数 soft 指的是:保留当前工作区,以便重新提交

还可以选择参数 hard ,会撤销相应工作区的修改,一定要谨慎使用。

然后,通过 git log 确认已成功撤销。

commit 6fcebc3d862169a839469f522a7097b97d959a16 (HEAD -> master)
Author: Flicker <libmi@foxmail.com>
Date:   Thu Feb 21 16:45:20 2019 +0800

    update git ignore.

然后通过 git push origin master --force 强制提交当前版本号,以达到撤销版本号的目的:

$ git push origin master --force

Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/FlickerMi/xxx.git
 + a500e6b...6fcebc3 master -> master (forced update)

必须添加参数 force 进行强制提交,否则会提交失败报错:本地项目版本号低于远端仓库版本号。

最后就可以修改代码,重新提交和push了。