Git如何将多个commit合并一个commit

问题场景:我在fork的仓库提交多个commit后,准备向原仓库提交pr,但是原仓库要求一个pr一个commit,因此需要先将这些commit合并为一个。

1.先拿到要合并的commit中最早的一个的commit id,然后进入仓库,使用如下git log命令拿到这个commit的前一个commit的id(打印出的第二个,如下图)
bash 复制代码
git log --pretty=format:"%H %P" -n 1 <最早的一个的commit id>
2.然后基于这个commit id进入rebase模式
bash 复制代码
git rebase -i 871c44f849b8af50ae2cb3289958336591b97941

如下我要将这些commit合并为一个,将第一个pick下的所有行开头的pick都改成s即可(s表示与上一个commit合并)

一个一个改显然很麻烦,如何多行同时编辑:

第一步多行同时删除:先将光标移动到要修改的行首,使用ctrl+v快捷键进入VISUAL BLOCK模式,然后使用键盘的上下左右箭头将光标移动到最后一个pick的c后面,然后按d删除所有选中的pick

若操作失误可使用esc退回普通模式,在使用shift+:进入命令模式,输入u回车撤销上一步编辑

第二步多行同时编辑:光标再移动到要编辑的首行,然后使用ctrl+v快捷键再次进入VISUAL BLOCK模式,将光标向下移动到最后一行行首。shift+i(即大写I)进入编辑模式,此时会自动跳到要操作的第一行,直接输入字符s,然后按esc键 后面的行就同步刷新了。

最后shift+:进入命令模式输入wq保存。此时会跳转到合并后的commit的信息编辑页面,当前显示的是所有合并commit的信息,看起来很多很乱,我们可以把这些信息全部干掉,然后为这个新commit编写一个简短的提交信息,选择一行开始直接长按d可以快速进行删除,和vim中的编辑其实是一样的

最终结果如下,然后shift+:进入命令模式输入wq保存

3.再使用git log命令查看,确认之前那些commit已经合并为一个了

最后我们再将这个新commit强制push到远程仓库(普通push可能push不上去)

bash 复制代码
git push origin master --force
相关推荐
aPurpleBerry43 分钟前
【问题解决】Github上手动Delete file之后, git remote add+git push出错
git·github
M_emory_2 小时前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Make_magic2 小时前
Git学习教程(更新中)
大数据·人工智能·git·elasticsearch·计算机视觉
不穿铠甲的穿山甲2 小时前
git-.git目录解析
git
唔知小罗12 小时前
git config是做什么的?
git
不是鱼17 小时前
新人程序猿必备的git技能(超实用基础版)
git·github
Exclusive_Cat21 小时前
Git的使用(基础语句)
git
江上清风山间明月21 小时前
git撤销、回退某个commit的修改
git·commit·版本·撤销·回退·特定
cui_win21 小时前
Redis高可用-主从复制
redis·git·github·主从复制·哨兵
Anlici1 天前
大厂怎么用Git命令
git