微知识-git rebase常用的3个场景和2个本质

如何修改历史提交的commit 的msg信息 r

- git rebase -i xxxx 其中xxx是需要修改的commit的father , -i 是指交互式
- 将pick 修改为r 表示修改commit msg
- 其他的不要动
git rebase的原理是,在交互式界面好比是输入命令,然后把所有需要操作的commit进行一些命令操作。然后在命令行指定的-i xxx 主要是让git rebase自动帮我们从某个commit开始把他的子节点遍历放上去

如何将多个连续的commit合并到一起

原理和前面类似,掌握了rebase的底层原理其实就是 rebase的命令 + commit的obj的sha1数字指针
- git rebase -i xxx
- 由于rebase会根据-i 遍历所有子节点,但是可能只需要修改某几个,就只修改某几个
- 将需要把A B C D合并到一起,假设A最先提交,BCD最后,那么都合并到A,然后在A前面依然是pick,然后修改BCD的都为s,squash压缩类似压缩饼干。他这里s命令的作用就好比把当前commit合并到前一个commit中。所以abcd合并到一起,本质是把bcd压缩到a中。然后bcd压缩到他们前面,就可以用rebase到的s命令。
- 然后弹出交互信息,添加一行交互信息并且提交
这里透出一个本质 rebase -i之后,好比是rebase的子命令脚本,他会根据这个脚本依次处理。不处理的就用pick 需要处理的就用其他命令。比如s是把他压缩到前面。r是当前commit修改msg。
而且这里的操作对象都是每个commit,然后相当于rebase是修改不同commit进行一些操作。

另外还有一个场景,如果要把不连续的每个commit如何整理到一起呢?把握了本质rebase运行机制,很快处理。把rebase当做一个脚本,然后在脚本中顺序指定需要操作的commit,如果要合并多个不连续的,就选择一个pick,其他的放在他后面使用s 进行压缩进去就行了。

这里的2个本质总结一下:

  1. rebase -i 本质是开启一个rebase的处理脚本,并且是一行行顺序直行
  2. 操作的对象是commit信息,操作的命令是p r s。commit本质是gitobj

如果把自己当做git的设计者,这里rebase命令,会先读取rebase -i指定的脚本,然后依次读取每行,然后根据每行的子命令进行处理。比如如果是r就修改这个msgid,本质是修改git obj的msgid。如果是s,应该是把其他几个commit或者obj的diff进行merge,然后合并,但是不会删除其他obj,保留s到前面的那个obj,并且修改那个obj

其他rebase的cmd后期补充

后记:
通过把rebase当做一个脚本,操作commit,假设是设计者对commit序列化的进行一些合并 重命名操作obj,从而能够灵活的理解和掌握git,并且不用死记硬背。
更多git本质的理解以后逐渐更新。

相关推荐

  1. 知识-git rebase常用3场景2本质

    2024-04-03 12:38:03       4 阅读
  2. 大模型提示工程常用场景下Prompt案例

    2024-04-03 12:38:03       7 阅读
  3. React 掌握及对比常用8Hooks,优化及使用场景

    2024-04-03 12:38:03       6 阅读
  4. WebSocket11面试常见知识

    2024-04-03 12:38:03       24 阅读

最近更新

  1. leetcode705-Design HashSet

    2024-04-03 12:38:03       8 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-04-03 12:38:03       8 阅读
  3. vue3、vue2中nextTick源码解析

    2024-04-03 12:38:03       8 阅读
  4. 高级IO——React服务器简单实现

    2024-04-03 12:38:03       8 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-04-03 12:38:03       7 阅读
  6. go第三方库go.uber.org介绍

    2024-04-03 12:38:03       8 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-04-03 12:38:03       10 阅读

热门阅读

  1. linux tasklet

    2024-04-03 12:38:03       4 阅读
  2. BabyAGI源码解读(2)-核心agents部分

    2024-04-03 12:38:03       4 阅读
  3. C# 各种数据结构定义以及初始化

    2024-04-03 12:38:03       5 阅读
  4. 计算机视觉无人驾驶技术:入门指南

    2024-04-03 12:38:03       4 阅读
  5. 中介者模式:优雅解耦的利器

    2024-04-03 12:38:03       4 阅读
  6. 分布式锁的几种实现方式

    2024-04-03 12:38:03       4 阅读
  7. 策略模式

    2024-04-03 12:38:03       3 阅读