更改上次提交的注释

大前提,我们规定的是每天完成一块功能,然后每天都对这个功能完成单元测试,同时提交一次,形成一个commit
但是问题是,我们每天在本地可能会遇到各种突然情况,然后会导致违背上面的那个提交规范,此时我们就需要对提交历史进行调整,来重新规范化我们本地的提交历史
前提,本讲讲到的这些对commit的调整,全部是针对的是本地,那些commit还没有被push到远程仓库去,仅仅在本地执行了git commit命令

对最近一次commit的备注或者代码进行修改

(1)修复上一个提交的不规范的备注
如果你刚刚执行了一个commit,结果发现,不好,我其实应该补充更多的备注,才能符合公司对commit备注这块的规范的,刚才写的太简单了
没关系,可以修改一下。。。。。。前几讲,也给大家演示过了,就是修改上一次commit的提交备注
git commit --amend
直接就可以修改上一个commit的备注信息,补充更多的提交说明
相当于是将上一个commit删除掉,然后基于上一个commit对应的代码重新构建一个commit object
(2)对上一次commit加入几行遗漏的代码
或者说,你刚执行了一个commit,结果扫了一眼代码,发现今天忘记修改几行代码了,需要修改之后补充到上一个commit中去,没关系
先修改你的代码,同时加入暂存区,然后再次执行:
git commit --amend
就会将你最新修改的代码跟上一次合并到一个commit中去
但是这里要注意,git commit --amend是会修改commit的SHA-1 hash值的,所以如果一个commit已经push到了远程仓库,就不要再去修改了,否则的话会造成提交历史的一个混乱
所以说,本讲针对的全部都是本地的提交历史

对历史上的多个commit进行修改

这个场景,常见于这样,你可能在本地连续几天都提交了几个commit了,但是一直都忘了push到远程仓库。此时突然有一天,你发现你需要将这个几天的commit都是一次性push到远程仓库,但是你看了一下,发现你3天前的某个commit的备注不规范,需要调整一下,此时你需要。。。
git commit --amend,只能针对最近一次commit去修复和调整
使用git rebase -i HEAD~3,就是调整最近3个commit
同时要注意,如果你已经推送到了远程版本库的commit,不要修改和调整
然后需要将你需要调整的commit之前的pick修改为edit,比如选择其中一个commit
此时你需要对你要修改的commit,一个一个的进行修改,可以修改3天前的那个commit的备注,执行git commit --amend即可
你如果要对前几天的某个commit加入更多的代码,可以仿照之前讲解过的那个先修改代码,加入暂存区,接着git commit --amnend,就可以加入代码。或者是直接执行git commit --amend,修改备注即可。
修改完了一个commit之后,可以执行下面的命令,继续修改下一个commit
结束之后,执行git rebase --continue
最终会将你设置为edit的那几个commit都让你一个一个的修改
但是我这里说下,对前几天的commit,一般是不加入代码的,除非是特例,比如说你发现你3天前些好的某个功能,忘了加一些非核心的代码,比如说日志代码,监控代码,那么你可以加入那些代码

删除commit以及调整commit的顺序

(1)删除commit是需要的,比如说你偶尔,不小心手贱,或者是一个应届生,不小心就加了一个空行,结果就搞了一个提交,此时需要将那个commit给删除掉
(2)调整commit的顺序,这个就不太靠谱了
接着上面的命令,可以对多个commit,删除你不想要的那个commit,同时也可以调整顺序,然后保存
接着git直接会自动追溯到那几个commit的最近一个parent commit,重新按照你的顺序应用代码改动
这个场景常见于说,你不小心进行了某次无意义的提交,举个例子,不小心加了一个测试代码,结果还提交了,其实那个commit是不需要的,此时可以用这个办法删除那个commit

将多个commit合并为一个commit

如果恰巧你就是今天不小心做了多次commit,干脆破罐子破摔吧,就做多次commit
但是最后今天要push到远程仓库之前,可以将今天的多个commit合并在一起的
就是在上面的那个界面,可以将多个commit前面的命令修改为squash,就会自动将这些commit合并为一个commit
提示一下,如果要合并多个commit,那么一定要往前多选择一个commit

将一个commit切分为多个commit

还有一种情况,就是你不小心将3天修改的代码都合并成了一个commit了,此时木已成舟,没法用git add -i来多次commit了,咋办?
没事的,将这个commit拆分为多个commit就好了
还是在上面那个界面,将要拆分开来的commit前面的指令,修改为edit
然后你就会回到那个commit对应的版本,此时执行git reset HEAD^,此时会直接回退到之前的状态,然后此时可以执行多次git add和git commit,形成多个commit
接着最后执行git rebase --continue结束这次commit拆分
6、最后总结
其实上面所有的场景,针对的都是那些大公司,对提交历史有一定严格规范和要求的公司
如果你违反了那些规范的话,需要手动去调整你的提交历史的