在团队开发中,你只负责一个功能点,但是你却有10-20次的提交记录,等到代码合并推送远程时,你会发现都是你的提交记录,不方便阅读和查看。因此就需要到了 git rebase
提示:git rebase 适用于本地提交记录的合并(未推送到远程之前进行的合并)
本地提交合并:
//查看提交记录
git log

上图所示,我本地有3条记录未提交,如果我想把这3条记录合并为一条记录,即可以进行 git rebase操作:
//合并最近的 3 次提交纪录
git rebase -i HEAD~3
pick 562d4f78 修改1
pick 734f6199 修改2
pick d0cb5976 修改3
注:
第一列是rebase具体执行的操作,其中操作可以选择,其中含义如下:
选择pick操作,git会应用这个补丁,以同样的提交信息(commit message)保存提交
选择reword操作,git会应用这个补丁,但需要重新编辑提交信息
选择edit操作,git会应用这个补丁,但会因为amending而终止
选择squash操作,git会应用这个补丁,但会与之前的提交合并
选择fixup操作,git会应用这个补丁,但会丢掉提交日志
选择exec操作,git会在shell中运行这个命令
(自动进入 vi 编辑模式)
下图中的标注处我把 pick 改为了 s
修改完成后直接保存(按Esc键,按 shift+ ':' ,然后输入 :wq)

我这边会报这个错误,不过直接按 E 继续编辑就行了

下图标记处为合并后的提交备注,我这边直接合并为一个备注

修改完成后直接保存(按Esc键,按 shift+ ':' ,然后输入 :wq)

这时候基本上就已经合并成功了,再次输入 git log查看,之前的3条记录已经被合并为1条了

然后再把本地的记录提交到远程分支上
git push origin new-swx

本地提交的3条记录,被合并为1条提交到远程,里面的内容为3条提交记录修改的整合
远程提交合并:
之前已经说了 git rebase适合于本地提交的合并,所以说要想合并远程的提交是不能进行直接操作的。
在远程分支 new-swx上,我想要把标注的3条提交给合并,我需要怎么做?

解决方案:
1.在new-swx 上合并前3次的提交记录,具体流程可参考上面的本地合并流程
git rebase -i HEAD~3
2.删除远程 new-swx分支并推送本地 new-swx分支
git push origin :new-swx && git push origin new-swx
最终实现效果:

可能会遇到的问题:

git rebase --continue //继续执行
git rebase --abort //终止运行
git rebase --skip //跳过运行
git rm -fr ".git/rebase-merge" //删除这个文件