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
相关推荐
马优晨1 小时前
Git 中的某个分支打标签
git·git 中的某个分支打标签·git分支打标签·git 分支打tag·git 分支打标签tag
Blue桃之夭夭1 小时前
git和VScode
ide·git·vscode
码厂一粒沙9 小时前
【代码管理】git使用指南(新手向)
git
李贺梖梖18 小时前
Git初识
git
~央千澈~18 小时前
git大文件储存机制是什么-为什么有大文件会出错并且处理大文件非常麻烦-优雅草卓伊凡
git
Komorebi_999919 小时前
Git 常用命令完整指南
大数据·git·elasticsearch
stark张宇21 小时前
Git 与 GitHub 协同工作流:从0到1搭建版本控制体系
git·gitlab·github
爱吃生蚝的于勒1 天前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
minji...1 天前
Linux相关工具vim/gcc/g++/gdb/cgdb的使用详解
linux·运维·服务器·c++·git·自动化·vim
Arva .2 天前
开发准备之日志 git
spring boot·git·后端