git rebase 合并提交,精简 git log

  • 步骤概括

    1. 查看提交的历史

      git log --graph --pretty=oneline --abbrev-commit

    2. git rebase 合并提交

      1. HEAD版本 开始合并,包括 HEAD版本,到之前的 n 个提交

        git rebase -i HEAD~n

      2. (可选,通常在合并大量 commit 的时候使用)指定一个前开后闭的合并提交的区间,startpointendpoint,意思就是 startpoint 不参与合并。startpointendpoint 的值是 commit id,比如具体操作第 1 步中的 326e415

        git rebase -i [startpoint] [endpoint]

      参数说明:

      • -i 的意思是 --interactive,即弹出交互式的界面让用户编辑完成合并操作
      • startpointendpoint 指定了一个编辑区间
      • 如果不指定 endpoint,则该区间的终点 endpoint 默认是当前分支 HEAD 所指向的提交
  • 具体操作(后面主要转载此链接

    1. git log 查看提交历史如
      请添加图片描述

    2. 比如执行 git rebase -i HEAD~3 会弹出类似以下合并设置窗口

      请添加图片描述

      上图的内容改成如下的意思就是把第二次、第三次提交都合并到第一次提交上。

      pick 85697ee This is first commit.
      squash ee461c1 This is second commit.
      squash 326e415 This is third commit.
      
      • 操作说明:

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

        第一个提交不能是 squash,因为如图说明,它们是从头到尾的串行执行,且 squash 的意思是将该 commit 和前一个 commit 合并。

        如果读者也遇到只需要保留其中某个 commit 的信息,可以先保证第一行是 pick 操作,之后都是合并到第一行,在本文后续第四步的最终提交的编辑窗口再确定和输入此次合并的 commit 信息

      • 温馨提醒

        如果读者有大量 commit 要合并,在进入合并设置窗口后,可以结合 vim 的丰富编辑功能操作,比如快速替换除第一行外的 picksquash

        1. 显示行号

          :set number

        2. Vim 在选定范围内查找和替换

          :<start line number>, <end line number>s/old/new/g
          如笔者要合并 11 个 commit 则 :2,11s/pick/squash/g,回车

    3. :wq 保存退出,Git 会压缩提交历史。

      如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。修改以后要记得敲下面的命令:

      git add .  
      git rebase --continue
      

      如果你想放弃这次压缩的话,执行以下命令:

      git rebase --abort
      
    4. 如果没有冲突,或者冲突已经解决,则会出现最后的本次合并提交的 commit 说明编辑窗口

      请添加图片描述

      比如

      Commit feature branch!
      
      #This is first commit.
      #This is second commit.
      #This is third commit.
      

      :wq保存提交后即可再查看日志git log --graph --pretty=oneline --abbrev-commit

      请添加图片描述

  • 参考链接

    https://www.cnblogs.com/sunbines/p/15478014.html

    https://segmentfault.com/a/1190000021007417

    https://liaoxuefeng.com/books/git/branch/rebase/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值