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了。
Comments (暂无评论)