Git命令之rebase合并多个commit
1、使用场景
当修改一个bug时,提交了很多个commit,但是每次改动都很小,感觉多个commit有点多余,想合成一个commit。这个时候就可以使用git rebase合并多个commit为一个commit。
说明:这个时候的多个commit其实已经提交到了远端,毕竟只有远端有多个commit时,看着不顺眼才会考虑到合并的问题。
2、合并步骤
①查看远端的多个commit
远端网页上可看到的commit记录

本地使用 git log --oneline --graph可看到的commit记录

说明:
-
我们可以合并第一个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的个数
- 输入命令

- 回车后,会进入vim编辑框

此时需要更改第二次commit哟至第五次commit哟的pick为squash或者s即可,squash代表合并该提交到前一个提交。其他参数说明直接参考人家给出的解释即可。
- 修改成这样子的(修改时按i进入编辑模式)

-
然后:wq保存即可
正常没有冲突的话,会出现一个新的vim编辑,用于修改commit的message,此时注释或删除掉不要的文字,填写要保留的文件即可,其实这就是写一个commit message,所以可以随意些。如果出现冲突,可以参考本文最后的备注说明。

编写commit message,然后:wq保存即可,例如这样子

保存后,如果用git status查看状态,是可以看到这样子的,但是这个时候,一定不能用git pull来拉取代码合并,直接忽略即可

- 直接git push -f 强制推送,这就OK了

③查看是否已经合并完成
远端网页上可看到的commit记录

本地使用 git log --oneline --graph可看到的commit记录

和之前未合并为一个commit的图片对比,可以看出,在ffa88b4之上已经只有一个commit了,表示成功了。
3、冲突备注说明
如果上面的压缩commit保存文件时,出现冲突,即上文提到的

则手动解决冲突后,输入命令
git add .
git rebase --continue
如果想放弃这次合并,使用命令
git rebase --abort
学习链接🔗https://www.jianshu.com/p/571153f5daa1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2020-09-01 CSS笔记