git rebase合并多次commit

root@guanhp-pc:/opt/gittest# git lg
* c3423d1 - (HEAD -> master) 第四次提交 (2 分钟前) <qqghp>
* 1be948f - 第三次提交 (5 分钟前) <qqghp>
* 751c9e3 - 第二次提交 (5 分钟前) <qqghp>
* fe1dc2f - 第一提交 (6 分钟前) <qqghp>
git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

git rebase -i 36224db   或
git rebase -i HEAD~3 

显示如下:

pick 751c9e3 第二次提交
pick 1be948f 第三次提交
pick c3423d1 第四次提交

# 变基 fe1dc2f..c3423d1 到 fe1dc2f(3 个提交)
#
# 命令:
# p, pick = 使用提交
# r, reword = 使用提交,但修改提交说明
# e, edit = 使用提交,但停止以便进行提交修补
# s, squash = 使用提交,但和前一个版本融合
# f, fixup = 类似于 "squash",但丢弃提交说明日志
# x, exec = 使用 shell 运行命令(此行剩余部分)
# d, drop = 删除提交
#
# 这些行可以被重新排序;它们会被从上至下地执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#
# 注意空提交已被注释掉

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

据我们的需求,我们将commit内容编辑如下:

pick d2cf1f9 fix: 第一次提交
s 47971f6 fix: 第二次提交
s fb28c8d fix: 第三次提交

上面的意思就是把第二次、第三次提交都合并到第一次提交上

然后wq保存退出后是注释修改界面:

# 这是一个 3 个提交的组合。
# 这是第一个提交说明:

第二次提交

# 这是提交说明 #2:

第三次提交

# 这是提交说明 #3:

第四次提交

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 日期:  Thu Jul 11 15:04:09 2019 +0800
#
# 交互式变基操作正在进行中;至 fe1dc2f
# 最后一条命令已完成(3 条命令被执行):
#    squash 1be948f 第三次提交
#    squash c3423d1 第四次提交
# 未剩下任何命令。
# 您在执行将分支 'master' 变基到 'fe1dc2f' 的操作。
#
# 要提交的变更:
#       修改:     11.txt
#

可以在浏览态 按下两个dd可以删除一行

最终的编辑效果如下:

# 这是一个 3 个提交的组合。

合并提交

# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 日期:  Thu Jul 11 15:04:09 2019 +0800
#
# 交互式变基操作正在进行中;至 fe1dc2f
# 最后一条命令已完成(3 条命令被执行):
#    squash 1be948f 第三次提交
#    squash c3423d1 第四次提交
# 未剩下任何命令。
# 您在执行将分支 'master' 变基到 'fe1dc2f' 的操作。
#
# 要提交的变更:
#       修改:     11.txt
#
~                                                                               
~           

编辑完保存即可完成commit的合并了:

root@guanhp-pc:/opt/gittest# git rebase -i HEAD~3
[分离头指针 bfed61a] 合并提交
 Date: Thu Jul 11 15:04:09 2019 +0800
 1 file changed, 7 insertions(+), 7 deletions(-)
Successfully rebased and updated refs/heads/master.

最后查看log可以发下提交合并了

root@guanhp-pc:/opt/gittest# git lg
* bfed61a - (HEAD -> master) 合并提交 (3 分钟前) <qqghp>
* fe1dc2f - 第一提交 (9 分钟前) <qqghp>

推送到远端需要加入--force,即git push origin master --force

使用git rebase合并多次commit

  • qq_43638135
    妲己再美究为妃: 博主没有想过自己接一些私活干吗?我现在还没毕业,但是我也确实听说外挂市场自动化游戏脚本市场挺火热的,并且报酬也很丰厚,但是具体的我也不是很清楚,求解答。 (1个月前 #47楼) 查看回复(2) 举报 回复
    22