背景概述
提交的commit,命名给错了,且这个commit已经被push到远程仓库上了。现在有一个需求,就是更新远程仓库的commit对象,那么我们看看可以如何实现这个需求。
git commit --amend
解释下git commit --amend命令的作用:修改最新一次提交对象的内容。在我们这次的需求中,就是修改提交对象的提交信息。
那么接着,在Idea的终端面板上,输入如下命令:
进入提交对象的内部:
可以看到提交对象的提交信息:
输入‘i’,进入编辑模式,并编辑提交信息:
按Esc键,退出编辑模式,进入正常模式,然后输入:wq,保存编辑内容:
可以看到,新生成了一个提交对象:
将修改后最新的commit对象,push到远程仓库:
在Git仓库上,可以看到旧有的commit直接被覆盖了,被替代成了最新的commit对象:
git rebase -i commit + git commit --amend
上面的做法只可以修改最近一次提交对象的信息。那现在比如,我想任意选择一个commit对象进行修改,可以怎么做呢?
可以使用git rebase -i commit + git commit --amend。
如下所示,我现在的需求是,修改如下画红框所示的这个提交对象,我想把提交信息改为:使用History对象访问浏览器的历史浏览记录。
那么现在,我们需要先选定一下rebase的基准对象。我们需要选择以待被修改的对象前一个提交对象,作为基准。那么我们记录下这个提交对象的版本号。这个提交对象是rebase的基准:
在Idea的终端输入如下所示的git命令:
接着根据终端的提示,选择要修改的提交对象,将pick改为edit:
编辑完成后,输入‘Esc’,然后再输入‘wq’,保存结果,然后会出现如下信息:
根据提示可知,这表明可以使用git commit --amend命令来修改commit对象,修改完成后,就可以继续rebase了。
那么我们输入git commit --amend命令:
编辑提交内容为:
编辑完成后保存并退出:
可以看到修改成功了:
然后再输入:git rebase --continue,继续进行后续的reabse操作:
从git logs中可以看到,最新的提交对象们,以‘[up]方法注释补充’这个提交对象为基准,挂到了这个对象的后面了。
注意,‘JS脚本明明…’这个提交没有被rebase,这是因为当时rebase的时候提示需要处理一下这个提交对象,我对这个提交对象做了跳过处理,所以rebase的时候,这个提交对象被跳过了。
到这里,就rebase结束了,那么现在就可以把最新的提交对象,push到远程仓库了:
push完成后,我们再来看下git logs,从中可以看到,通过使用git rebase -i commit ,实现了以指定commit对象为基准,选择性指定要修改的对象,然后再以git commit --amend命令进行修改即可。