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'命令,将改动强行推送到远程仓库;
网友评论