在用git作版本控制器的時候,常常會遇到如下狀況:git
一、在作1個功能的時候,你本身以爲代碼沒問題了,就本地commit,而後提交代碼,在gitlab上發起和並請求,老大看完以後,以爲你還有修改的地方,把你的代碼打回來從新修改,改完以後,本地commit,推到遠程,再次發起合併。到此功能作完,可是作完以後發現,你的一個功能commit了兩次,固然根據實際狀況有些時候你爲了作一個功能,來回不止兩次,這樣子的提交會讓這個分支看起來有點雜亂。那麼你會想要將你的幾回commit合併成一個commit後,再提交,那樣子分支看上去會很是清爽。gitlab
二、當你作功能的時候,你會遇到須要零時提交的狀況(好比你在作A任務,忽然來了B任務,在你A任務分支上你會先commit一次,等B任務作完,再回來繼續作A,作完以後會再次commit),此時你的一個任務有會有多個commit存在。this
本文的主要目的是教你怎樣將git中屢次commit合併成一個commit。.net
(1)git log看一下當前分支的提交狀況,下圖中有三個commit點。從先到後是:add 1 line,add 2 line, add 3 line。需求是:把add 2 line, add 3 line這兩個commit點合併成一個commit點。3d
(2)開始合併,敲下面這個命令:這裏面的commitId是你要合併的兩個commit後所造成的一個commitId須要跟着的commitId。在這邊也就是add 1 line的commitId.版本控制
git rebase -i commitIdblog
其中,-i 的參數是不須要合併的 commit 的 hash 值,這裏指的是第一條 commit, 接着咱們就進入到 vi 的編輯模式hash
進入vi模式後,在鍵盤上敲i鍵進入insert模式。這時候先看看這裏面的東西是什麼含義,it
pick 的意思是要會執行這個 commit
squash 的意思是這個 commit 會被合併到前一個commit
咱們這邊須要將"add 3 line"這個commit合併前前一個commit,也就是合併到「add 2 line」的commit中,那就須要修改爲以下的:io
修改完成後,按esc鍵,冒號,輸入wq進行保存。以後會繼續跳轉到commit message 的編輯界面:
註釋中有寫第一個commit信息和第二個commit信息,如今須要你合併這兩個信息成一個commit信息。我這邊合併成以下信息:
而後你就保存退出,跳回到最初的命令界面:
看到successfully的字樣就說明成功了。再git log看一下commit狀況:
從圖中就看到已經將add 2 line和add 3 line的commit合併成了this is combination of 2 commit。