一、问题说明
git commit 后,发现刚才的备注写错了,或者代码漏掉了,这时我们肯定是想取消刚才的提交。此刻有两种方法
(1)使用git reset命令将刚才的提交会退掉。需要注意的是git reset --soft 和git reset --hard的区别。
(2)修改刚才的提交:git commit --amend。这个命令的实质是使用一次新提交覆盖上一个提交
相比git reset很多优点git commit --amend有很多优点,如果工作区已经改的面目全非,这时如果执行 git reset, 就很难分的清哪些内容属于被撤销的提交了,而且修改已经push的提交,那么reset后有可能会因为本地版本比远程版本低而造成push被拒绝。
这里说第二种方法,git commit --amend
二、问题重现
1、 代码修改后,进行了第一次提交。请注意这里的版本号
2.现在我现在发现刚才的提交错了,下面开始amend的操作,修改刚才的提交
$ git commit --amend
得到如下的界面,出现一个vim编辑器,修改相关内容后,保存。如图所示我修改了提交的备注
保存后再看一下log日志,很明显,我成功的修改了提交的备注。但是需要注意的是,提交的版本号也变了,因此说git commit --amend命令的实质是使用一次新提交覆盖上一个提交。
至此,git commit --amend的使用已经介绍完毕了,有兴趣可以继续往下阅读。
问题扩展
有可能出现一个问题。我使用amend修改提交之后发现,原来我第一次的提交才是对的,amend的修改是错误的。那我想回到第一次提交的那个版本,怎么办?
这时候就可以使用git reset来进行恢复了。
首先使用 git reflog 命令查看操作记录,git reflog可以查看到你的所有操作历史,就像回退commit一样,你可以回退你的操作,当然不限于这里的amend,其他操作也可以使用这种方法撤回。
很明显,我们只需要回退’d5edfc3‘那个操作就行了。
我这里使用了git reset --hard (–hard参数会将回退的内容丢弃掉,请根据自己的需求谨慎使用)。
再次查看log后,很明显可以看到提交的备注、尤其是版本号,已经回到最开始的那一个版本了。
在Git中,总是有后悔药可以吃的。