命令
git rebase -i HEAD~4
或者
git rebase -i bddesdd6 #要合并的提交的上一条提交ID
合并(vi编辑器模式)
pick bddebfb1 退出修改
f 68326b8c 接口修改
f 699501f7 接口修改
f 784e86b3 接口修改
# Rebase 2b8d14b7..784e86b3 onto 784e86b3 (4 commands)
#
# Commands:
# p, pick <commit> = use commit
......
主要看这里的合并方式
根据描述 用f(fixup) (使用这个提交,但合并到前一个提交,并且忽略备注)
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
如果中途发生异常,比如还没完成关闭了终端,可随时中断重新rebase
git rebase --abort
同步到远程(确保此分支没有别的提交或者只有你在用)
git push origin branchName -f
=====================[Git]合并多次提交===============================
1 问题提出
很多时候,很难作到一次提交能够完整地解决一个功能,经常性出现以下情况:
为了完成2个功能,一共进行了5次提交,按照时间先后顺序分别为m1,m2,m3,m4,m5其中:
m1 对应 功能1的A模块;
m2 对应 功能1的B模块;
m3 对应 功能2的A模块;
m4 对应 功能1的C模块;
m5 对应 功能2的B模块;
如图所示:
1.png
如果能把提交m1,m2,m4合并成一次提交,然后提交日志改为"[功能1] 模块A,模块B,模块C"
把提交m3和m5,合并成一次提交,然后日志改为"[功能2]模块A,模块B"
就会显得更加整洁和优雅;
让我们来看看如何实现这个功能吧.
2 查看提交记录
"$ git log --oneline -5"用比较简洁的方式查看最近提交的5次日志:
1,git log命令可以查看提交的历史记录;
2,--oneline参数,commitid只显示前面7位,然后加上提交日志;
3,-n 参数,查看最近的n次提交的信息;
2.png
3 调整最近5次的提交
$ git rebase -i HEAD~5
该命令表示调整最近5次的提交
当输入该命令后,需要编辑一个文本文件,来指导git如何调整;
git首先会给出一个默认的模板给我们,模板如下:
3.png
红色部分,代表着当前5次提交的情况,表示按照提交顺序从前到后,分别是m1,m2,m3,m4,m5;
这个和我们的实际情况是一样的.
所以如果我们直接输入wq保存提交,什么都不会改变;
按照我们的需求,需要调整文本为这个样子:
4.png
pick 90094e0,表示使用m1这次提交;
squash 23009f9,表示将m2这次提交合并到上一次pick的提交,即m1;
squash 52647ed,表示将m4这次提交合并到上一次pick的提交,即m1;
pick 463bf9a,表示使用m3这次提交;
squash 890f916,表示将m5这次提交合并到上一次pick的提交,即m3;
进入底行模式,输入wq保存退出后,git将按照这个脚本执行调整命令;
当使用m1,合并m2,m4之后,提示输入第一次pick的的日志,会先分别显示这3次提交的日志:
5.png
我们更改为:
6.png
再次输入wq,保存退出,提示输入第二次pick的日志,我们直接输入
7.png
然后再次wq保存退出,提示编辑成功.
然后,我们在sourcetree上查看效果:
8.png
origin/master分支上,有5次提交,杂乱无章;
master分支上,现在只有2次提交,干净漂亮有没有;
4 改动推送到origin
使用 '$ git push -f'命令,将改动强行推送到远程仓库;
作者:BinaryBang
链接:https://www.jianshu.com/p/53a7e3930fdd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。