Git命令之rebase合并多个commit
1、使用场景
当修改一个bug时,提交了很多个commit,但是每次改动都很小,感觉多个commit有点多余,想合成一个commit。这个时候就可以使用git rebase合并多个commit为一个commit。
说明:这个时候的多个commit其实已经提交到了远端,毕竟只有远端有多个commit时,看着不顺眼才会考虑到合并的问题。
2、合并步骤
①查看远端的多个commit
远端网页上可看到的commit记录
![image-20210831203646272](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194731478-1898236597.png)
本地使用 git log --oneline --graph可看到的commit记录
![image-20210831203939480](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194732336-757409495.png)
说明:
-
我们可以合并第一个commit哟至第五个commit哟为一整个commit,此时我们只需要记录一下第一个commit哟之前的commit id即可(ffa88b4)
-
我们要合并的commit个数为5个,即第一个commit哟~第五个commit哟
②使用命令 合并步骤
git rebase -i ffa88b4
说明:这里的ffa88b4就是第一个commit哟之前的commit id,-i 参数后加不需要合并的commit ID
或者也可以使用该命令
git rebase -i HEAD~5
说明:5代表要合并的commit的个数
- 输入命令
![image-20210831204811777](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194732914-726811395.png)
- 回车后,会进入vim编辑框
![image-20210831205520598](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194733457-802565712.png)
此时需要更改第二次commit哟至第五次commit哟的pick为squash或者s即可,squash代表合并该提交到前一个提交。其他参数说明直接参考人家给出的解释即可。
- 修改成这样子的(修改时按i进入编辑模式)
![image-20210831210133285](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194733975-738348119.png)
-
然后:wq保存即可
正常没有冲突的话,会出现一个新的vim编辑,用于修改commit的message,此时注释或删除掉不要的文字,填写要保留的文件即可,其实这就是写一个commit message,所以可以随意些。如果出现冲突,可以参考本文最后的备注说明。
![image-20210831212544520](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194734403-1223958009.png)
编写commit message,然后:wq保存即可,例如这样子
![image-20210831212755510](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194734759-2061927863.png)
保存后,如果用git status查看状态,是可以看到这样子的,但是这个时候,一定不能用git pull来拉取代码合并,直接忽略即可
![image-20210831213012081](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194735051-1919175224.png)
- 直接git push -f 强制推送,这就OK了
![image-20210831213315761](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194735293-208647392.png)
③查看是否已经合并完成
远端网页上可看到的commit记录
![image-20210901100741281](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194735648-1849850395.png)
本地使用 git log --oneline --graph可看到的commit记录
![image-20210901100416858](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194736075-836237940.png)
和之前未合并为一个commit的图片对比,可以看出,在ffa88b4之上已经只有一个commit了,表示成功了。
3、冲突备注说明
如果上面的压缩commit保存文件时,出现冲突,即上文提到的
![image-20210901101942138](https://img2020.cnblogs.com/blog/1768648/202109/1768648-20210901194736631-1544873594.png)
则手动解决冲突后,输入命令
git add .
git rebase --continue
如果想放弃这次合并,使用命令
git rebase --abort
学习链接🔗https://www.jianshu.com/p/571153f5daa1