有时,在执行git push推送修改到远端之后,发现代码还需要进行一些很小的改动,并且不想因为这个小的改动而进行一次新的提交。在这种情况下,我们想撤销已经git push之后的提交,然后进行代码修改,再重新进行提交和推送。
我们需要两个步骤来完成撤销操作
(一)撤销提交信息
先通过git log查看提交日志,获取要退至的版本号
$ git log
commit 73354ae8bd821cc84e026f5c4612b01253b68d5f (HEAD -> master, origin/master, origin/HEAD)
Author: xxxxxx <xxxxxxxx@yahoo.com>
Date: Sun Mar 4 11:14:55 2018 +0800
remove some whitespaces
commit 18578a467ddffc2cfce16296b28fcc88b591f5cf
Author: xxxxxx <xxxxxxxx@yahoo.com>
Date: Sat Mar 3 23:43:03 2018 +0800
add mse function
commit e342194a6fb85c1aadbf00f14d623b47bd7ff9c9
假设我们想要撤销“remove some whitespaces”这次提交,我们首先找到其版本号18578a467ddffc2cfce16296b28fcc88b591f5cf
然后执行git reset --soft 18578a467ddffc2cfce16296b28fcc88b591f5cf 操作
其中的soft:保留当前工作区的修改,以便重新提交 。还可以使用hard参数,但是撤销相应工作区的修改,所以建议使用soft就好。
再通过git log确认是否撤销成功,如果成功应该如下图所示:
$ git log
commit 18578a467ddffc2cfce16296b28fcc88b591f5cf (HEAD -> master)
Author: xxxxxx <xxxxxxxx@yahoo.com>
Date: Sat Mar 3 23:43:03 2018 +0800
add mse function
commit e342194a6fb85c1aadbf00f14d623b47bd7ff9c9
(二)撤销远端的提交
git push origin <分支名> --force 强制提交当前版本号。
我这里的分支名是master,所以操作为:git push origin master --force
以上这两个步骤就完成了git push的撤销,之后可以继续修改程序,然后使用git add, git commit, git push重新提交到远端。