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
相关推荐
春日见4 小时前
E2E自驾规控30讲:导论
开发语言·驱动开发·git·matlab·计算机外设
__雨夜星辰__6 小时前
什么是 Git 与 Git※hub(※Git※hub加※速访※问教程)
git·github
家里有只小肥猫9 小时前
新项目git推送 删除
git
小码狐10 小时前
GIT相关
git·idea·基础
csdn_aspnet11 小时前
Git贡献全流程拆解:从Fork到PR的完整指南
git·fork·pr
XuDream11 小时前
idea中忽略idea文件不提交git和取消被 Git 追踪
java·git·intellij-idea
0xCode 小新12 小时前
Git常用操作
git·gitee·github
0vvv012 小时前
bugku-web-source(git泄露
git·ctf
Joy T12 小时前
【Web3】告别Remix:基于Hardhat的智能合约工程化构建与实战
git·web3·node·智能合约·hardhat
晨曦蜗牛13 小时前
Windows 上 Claude Code 报错 “requires git-bash“ 的完整解决方案
windows·git·bash