写这篇文章的目的, 是为了记录下如何解决Git多次提交记录聚合展示的方法。因为一个功能点的开发包括开发,测试等多个环节, 难免就会导致提交很多次commit, 而为了提交记录看起来更清晰, 且和功能点更好对应, 把这些相同目的的commit合并为一个就显得比较有意义了。当然, 也顺便治一下自己的强迫症。
查看提交记录
1 | git log --pretty=oneline |
选取要合并的commit
执行完上面的命令, 我们看到以下的提交记录:
1 | fea1d93fa84e112c2b7314db66b5a66a962e2166 fix: 修复模块xxxbug: bbb |
假设我们是想 fea1d93f、98f2a41e、7ab4333e 这3个commit, 作为新的模块xxx的提交记录。此处, 我们选取57654061作为聚合点(该commit之前的都需要被合并)。
合并commit
执行以下命令:
1 | git rebase -i 57654061 |
此处的commit 57654061 为 7ab4333e 的前一次提交。
执行完上述命令后, 会出现以下一个commit列表, 我们需要从中选取要保留的commit:
1 | pick 7ab4333e feat: 新增功能模块xxx |
编辑为下面所示, 将选取commit以外的行前面的pick
改为squash
or s
, 然后输入: wq
保存退出。
1 | pick 7ab4333e feat: 新增功能模块xxx |
若无冲突 or 冲突已 fix, 会出现一个commit message
的编辑页面, 修改commit message
, 然后输入: wq
保存退出。
1 | feat: 新增功能模块xxx |
若存在冲突, 则需要解决, 保留最新的记录, 输入命令:
1 | git add . |
若想放弃此次commit
合并, 输入命令:
1 | git rebase --abort |
强制提交
commit massage
修改完成后, 提交commit
, 输入git push -f
or git push --force
即可。
注意:
- 上述操作的前提是在非master分支, 建议开发新feature的时候在非master分支, 最终上线才合并到master
- 如果是master分支, 即便有master分支的提交权限, 也是不允许直接强制提交的(Gitlab), 需要去Git Repository的设置中(Protected Branches)开启