交互式git rebase压缩提交记录,合并提交记录
前言
交互式git reabse可以编辑某个提交点之后的提交记录.包括删除,修改,合并等.
本文安装git图形工具SourceTree. 以图形界面方式能更好地查看commit节点情况
本文中说到”压缩提交”和”合并提交”是同一个意思
⚠️注意
最好不要在主分支(例如:master)使用交互式rebase操作提交记录.
因为交互式rebase操作会令参与操作的提交节点和之后的所有提交节点的提交id(commit-hash)会发生变化.
方式1: 使用命令压缩提交
1 | |
动画例子: git rebase -i i8fe5 管理i8fe5 之后的提交节点

案例
用SourceTree打开项目可以看到, 分支上有6个提交记录, v1 — v6

目标: 压缩v1之后的提交到v2, 即: 合并(v3, v4, v5, v6) —> v2
1. 找出基点提交id(commit-hash).
基点: 变基rebase参考点, 参考点可以理解为”地基”.只作为参照,不参与操作
案例中v1就是基点, 所以要找到v1的提交id

通过SourceTree或git log, 找到v1的提交id
v1提交id为: b6919c7

2. 执行交互式git rebase命令
找到v1的提交id(b6919c7)后, 可以执行命令管理v1之后的提交节点
1 | |
执行命令后显示

其中pick, squash, fixup这3个操作与压缩提交有关
pick: 使用提交squash: 将提交融合到前一个提交中;fixup: 将提交融合到前一个提交中,不保留该提交的日志消息;
1 | |

3. 修改git rebase的交互文本压缩提交
压缩(v3,v4,v5,v6) —> v2 ,
1 | |

f, fixup: 将提交融合到前一个提交中,不保留该提交的日志消息;pick: 使用提交
确认编辑完成后, “:wq”保存退出
4. 效果
(v3, v4, v5, v6) 合并到 v2

图中的v2是一个全新的提交节点, 提交id和之前的v2是不同的. 只是提交信息和之前的v2相同而已
方式2: 使用图形界面压缩提交
图形界面软件: SourceTree


依次操作

按钮“用此前的squash” 可以理解为讲选择的提交记v6录合并到上一个提交记录v5


之后依次把v3,v4,v5,v6合并
确定操作,点击”确认”.

压缩提交的时候,SourceTree会自动生成默认的提交消息.

(可选)如果需要修改提交信息
⚠️注意: 使用交互式rebase修改提交消息(commit message), 会改变当前和之后所有提交节点的提交id
所以, 主分支(例如:master)也最好不要使用这个操作



