Git拆分commit提交

admin發表於2018-08-07

如果感覺某一次提交的內容較多,可以將它們拆分為多個提交。

首先看一下提交歷史記錄,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log --oneline

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/001731jvjvno90bvkywnja.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

在e222850提交中,新增了兩個檔案one.txt和two.txt,下面將這兩個檔案拆分出來,然後分別進行提交。

首先執行如下程式碼:

[Shell] 純文字檢視 複製程式碼
$ git rebase -i b0aa963

特別說明:b0aa963用來確定commit範圍,表示從此提交開始到當前的提交(不包括b0aa963提交)。

執行此命令後,彈出VIM編輯器,關於編輯器的基本操作參閱git Vim編輯器輸入內容、儲存和退出操作一章節。

截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/001904eggagcogl6g523o4.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

截圖說明:

(1).頂部的commit提交排列順序與git log排列相反,最先提交的在最上面。

(2).前面的pick表示保留此次commit提交不做修改。

(3).底部給出所有可用的命令。

將e222850提交前面的pick修改為edit,那麼當Rebase執行到這一行的時候會停下來:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/001930xcvoca6kcmmw1p1o.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

儲存並退出,這時候HEAD指標指向e222850處:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/001949l55272i6qnsaxaw1.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

然後執行如下命令:

[Shell] 純文字檢視 複製程式碼
$ git reset HEAD^

這樣的話,e222850中新增的兩個檔案在工作區相當於新建立(處於未跟蹤狀態)。

關於reset命令可以參閱git reset用法詳解一章節。

然後檢視一下當前狀態:

[Shell] 純文字檢視 複製程式碼
$ git status

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/002113xfflc6wrjx54tdtw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

然後使用add和commit命令分別將這兩個檔案單獨提交:

[Shell] 純文字檢視 複製程式碼
$ git add one.txt

將one.txt檔案加入到暫存區。

[Shell] 純文字檢視 複製程式碼
$ git commit -m "add one.txt"

使用commit命令完成一次提交。

[Shell] 純文字檢視 複製程式碼
$ git add two.txt

將two.txt檔案加入到暫存區。

[Shell] 純文字檢視 複製程式碼
$ git commit -m "two.txt"

使用commit命令完成一次提交。

現在仍處於Rebase狀態,所以要讓它繼續執行完畢,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git rebase --continue

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/002310hq9ob9mqqs114omw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

現在檢視一下提交歷史,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log --oneline

程式碼執行效果截圖:

a:3:{s:3:\"pic\";s:43:\"portal/201808/07/002343g6k22z0ukjuk1kpu.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

原來的提交物件e222850已經被拆分為兩個。

相關文章