Git命令之rebase合并多个commit

1、使用场景

​ 当修改一个bug时,提交了很多个commit,但是每次改动都很小,感觉多个commit有点多余,想合成一个commit。这个时候就可以使用git rebase合并多个commit为一个commit。

说明:这个时候的多个commit其实已经提交到了远端,毕竟只有远端有多个commit时,看着不顺眼才会考虑到合并的问题。

2、合并步骤

①查看远端的多个commit

远端网页上可看到的commit记录

image-20210831203646272

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

image-20210831203939480

说明:

  • 我们可以合并第一个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的个数

  • 输入命令
image-20210831204811777
  • 回车后,会进入vim编辑框
image-20210831205520598

此时需要更改第二次commit哟至第五次commit哟的pick为squash或者s即可,squash代表合并该提交到前一个提交。其他参数说明直接参考人家给出的解释即可。

  • 修改成这样子的(修改时按i进入编辑模式)
image-20210831210133285
  • 然后:wq保存即可

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

image-20210831212544520

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

image-20210831212755510

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

image-20210831213012081
  • 直接git push -f 强制推送,这就OK了
image-20210831213315761

③查看是否已经合并完成

远端网页上可看到的commit记录

image-20210901100741281

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

image-20210901100416858

和之前未合并为一个commit的图片对比,可以看出,在ffa88b4之上已经只有一个commit了,表示成功了。

3、冲突备注说明

如果上面的压缩commit保存文件时,出现冲突,即上文提到的

image-20210901101942138

则手动解决冲突后,输入命令

git add .
git rebase --continue

如果想放弃这次合并,使用命令

git rebase --abort

学习链接🔗https://www.jianshu.com/p/571153f5daa1

posted @ 2021-09-01 19:59  南风丶轻语  阅读(2501)  评论(0编辑  收藏  举报