https://blog.csdn.net/vxzhg/article/details/105448190?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105448190-blog-123068284.t0_eslanding_v1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105448190-blog-123068284.t0_eslanding_v1&utm_relevant_index=2

使用 git rebase -i 命令就可以将从最后一次提交往前的多次提交合并为一次。

使用举例:
当前我的提交记录如下,一共有3次提交,下面就把这3次提交合并为一次:
待处理状态

输入以下命令:

git rebase -i HEAD~3

   
   
  • 1

之后会弹出现目的编辑窗口:

这是一个vim编辑的文本,需要使用vim命令进行编辑。

  • 首先,输入i命令,进入编辑模式。
  • 我们需要关注的是最上面几行以pick开头的信息。需要把除了第一行外的pick改成s。
  • 然后按esc键退出输入模式,输入:(英文冒号)进入底线命令模式
  • 再输入wq 即保存后退出

pick or s

之后会展示如下界面,进行提交注释处理。

我们把除了一个条之外的注释都删除掉,删除后的效果如下:

最后的注释
之后同样地保存退出即可。

这样就结束了,再用git log 查看下提交记录,发现已经变为一条记录了。要注意这条记录是三次中最早的那一次,它显示的提交时间和第一次的时间一致。但是它却也是一条新的提交记录,可以注意到它的提交记录号已经和之前的三次都不一样了。

注意,如果当前分支之前已经推送到远程了,需要使用git push -f 才能将rebase后的分支推送到远程。使用git push -f之前需要注意,如果当前分支是多人共同开发的,需要注意别把别人的推送覆盖了。

命令解释

这篇文章写完很久了。但其实有些东西没说清楚。
HEAD~3 表示从最后一个commit往前数4个的那次提交。
git rebase -i [start] [end] 为完整参数的参数,不写结束的时候表示结束为HEAD。
而且start到end的区间是前开后闭的,所以前面HEAD~3表示倒数第4次提交,但合并的是倒数3次提交。
在合并时也可以只合并中间的几次提交,不一定非得像文中一样都合并到最后一次的。
具体来说,想合并到其前一次提交的标记为s,想保留的标记为pick§。如有4次提交,前两次合并,后两次合并:

pick commit1
s commit2
pick commit3
s commit4

   
   
  • 1
  • 2
  • 3
  • 4

大家有什么疑问和自己的见解欢迎在评论区提出,非常希望能和大家有更多的交流。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐