想要獲取更多文章可以訪問我的博客 - 代碼無止境。
在日常的開發過程中,我們一個功能可能會有很多次提交。而且我們公司的開發是不允許直接往公司倉庫提交代碼,所以需要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命令
