想要获取更多文章可以访问我的博客 - 代码无止境。
在日常的开发过程中,我们一个功能可能会有很多次提交。而且我们公司的开发是不允许直接往公司仓库提交代码,所以需要fork到自己的仓库然后merge过去,这样就会导致拉代码会产生很多的commit,而这些commit其实是没有什么实际意义的。提交记录过多会导致代码review非常困难,那么今天我们就来介绍一个非常实用的命令 - git rebase,它可以将若干次提交合并成一个提交,下面我们就一起来见证一下这个骚操作吧。
准备
首先我们需要准备一个前提环境:
1.初始化一个git仓库。
mkdir git-test
cd git-test
git init
2.创建一个README.md文件。
3.创建若干个提交(>1)。
我们执行git log命令会得到如下结果,一共有三次提交记录,我们将通过git rebase命令将后两个提交合并成一个commit:
$ git log
commit 8d27ccf975e5ce4af8fd12fa75534b78fdc5b065 (HEAD -> master)
Author: 码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 16 18:00:57 2019 +0800
第三次提交
commit c953ae97af01e49d7f0ad959b42b91334a6726f3
Author: 码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 16 18:00:30 2019 +0800
第二次提交
commit 53407186cedef4be98d6001a69ee33d3a8d745fc
Author: 码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 16 18:00:06 2019 +0800
第一次提交
合并提交记录
1.首先我们执行git rebase -i HEAD3,这里的HEAD2代表的合并最近两次提交,命令执行后会进入到一个vi编辑页面,如下所示:
2.编辑之后的内容为:
p c953ae9 第二次提交
s 8d27ccf 第三次提交
3.编辑好后,保存(:wq)
4.然后会进入到一个编辑提交信息的界面(vi编辑),我写的”合并提交”,我们看最后合并提交的时间和第二次提交的时间一直,代表上面的合并是将第三次提交合并到了第二次提交。
5.保存消息后就执行成功了,我们再执行以下git log命令查看,会发现如下效果
$ git log
commit b1ab9f0af528aa96c333b2287c85d06e9fea891b (HEAD -> master)
Author: 码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 16 18:00:30 2019 +0800
合并提交
第二次提交
第三次提交
commit 53407186cedef4be98d6001a69ee33d3a8d745fc
Author: 码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 16 18:00:06 2019 +0800
第一次提交
合并时的几个命令介绍
- pick:正常选中
- reword:选中,并且修改提交信息;
- edit:选中,rebase时会暂停,允许你修改这个commit
- squash:选中,会将当前commit与上一个commit合并
- fixup:与squash相同,但不会保存当前commit的提交信息
- exec:执行其他shell命令