美文网首页
[Git]合并多次提交

[Git]合并多次提交

作者: BinaryBang | 来源:发表于2019-12-20 15:42 被阅读0次

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

    Reference

    1.vim如何移动一行
    2.合并多次提交

    相关文章

      网友评论

          本文标题:[Git]合并多次提交

          本文链接:https://www.haomeiwen.com/subject/udrinctx.html