git rebase -i 实现合并commit
前言:在开发过程往往在开发分支下有几十个commit记录,而这个时候合并到master分支上,导致对于master分支来说存在没有意义的commit,在master分支上的提交应该只记录每次发版上线的版本号即可,便于回退,不需要记录那些开发分支上的commit,所以我们需要合并commit
假设我们目前的份上有3个commit分别是1,2,3
那这个时候我们需要把这2跟3合并成一个commit记录,那我们需要在git上输入命令
git rebase -i 86fe8c91c4fcbe4f86838e503a8ba1835413c708
这个时候会进入vim的编辑器
这个时候我们在键盘上敲下i,让vim编辑器进入写入状态
然后可以移动光标,除了第一行之外的提交,全部将pick修改为squash(此处博主不知道为什么第一行不能修改为squash,其他行就可以,有知道的小伙伴可以告诉我),squash代表是需要被合并的提交,这里我们把3的合并到2中,所以把3的pick,修改为squash,要合并多个就修改多个即可
然后摁esc退出写入模式,然后直接输入:wq回车,即可保存退出vim模式,成功之后,会立刻进入commit编辑模式,这里是让我们给这个合并提交,写一些commit的信息
两个编辑器命令一样,摁i,进入写入模式,然后回车空出第一行来写一个信息记录这次的commit,这里随意发挥,然后同样的ESC之后,:wq保存退出
成功退出之后,可以看log,就发现2,3被合并了,至此合并commit就成功了~~
这个时候如果要提交到远程仓库是会报错的,如果分支只有你一个开发的话,那就直接使用git push --force origin 分支名
这种强制覆盖的方式推送即可,这个操作会覆盖别人的提交,要谨慎使用
此处提一点,这个操作存在风险,如果操作出现失误或发现进入了 分支名 | rebase的状态,可以通过git rebase --abort放弃之前的合并操作
注意,合并提交并不是完全自由选择的,需要选择一个commit id作为锚点,只能合并之后的commit,比如上述的列子,选择1作为合并的锚点,那只能合并2跟3,如果要合并1,2,3 那就要选择1之前的commit id作为锚点,