在开发一个需求时,可能会因为review意见修改、解bug等事务导致一个需求会有多个commit,当这个需求提交到主干时,会让主干提交记录变得十分混乱,对于后续代码维护也不是很友好。
所以,合并多个本地的commit变得十分有必要且重要。
连续commit
git rebase -i HEAD~3
3 代表想要合并最近两个commit,想搞几个就写几就好了。
命令输入后,会出现
pick 5ff9f11 test 1
pick 9fd1a2c test 2
pick 62ee3cd test 3
从第二行起将pick改为s(squash)
pick 5ff9f11 test 1
s 9fd1a2c test 2
s 62ee3cd test 3
保存退出即可。
不连续的commit
通过git log找到想要合并的提交前一个commit ID
git log
出现提交记录
commit b132b8b2d739b7adf924f560b367249acc55bda2 (HEAD -> master)
Author: kiba-zwei <xingbinkiba@163.com>
Date: Thu Jun 24 22:12:04 2021 +0800
test 3
commit d017d5d1c8a9ff3b11d8b8466f46e2462d269006
Author: kiba-zwei <xingbinkiba@163.com>
Date: Thu Jun 24 22:11:39 2021 +0800
test 2
commit 012e1365b8094b6b921695486d1182a29070f1e3
Author: kiba-zwei <xingbinkiba@163.com>
Date: Thu Jun 24 22:10:58 2021 +0800
test 1
commit 63696792b435dcd1c20aac27cd01ebb3cff6049b (origin/master, origin/HEAD)
Author: kiba-zwei <xingbinkiba@163.com>
Date: Mon Apr 5 08:26:48 2021 +0800
例如,本次想要合并 test 1 和 test 3两个提交,则需要找到test 1前的commit ID 即 63696792b435dcd1c20aac27cd01ebb3cff6049b ,输入命令
git rebase -i 63696792b435dcd1c20aac27cd01ebb3cff6049b
命令输入后,会出现
pick 012e136 test 1
pick d017d5d test 2
pick b132b8b test 3
将要合并的commit放在一起,并从第二行起pick改为s
pick d017d5d test 2
pick 012e136 test 1
s b132b8b test 3
保存退出即可。