在使用 Git 作為版本控制的時候,我們可能會由於各種各樣的原因提交了許多臨時的 commit,而這些 commit 拼接起來才是完整的任務。那麼我們為了避免太多的 commit 而造成版本控制的混亂,通常我們推薦將這些 commit 合併成一個。
1,檢視提交歷史,git log
首先你要知道自己想合併的是哪幾個提交,可以使用git log命令來檢視提交歷史,假如最近4條歷史如下:
commit 3ca6ec340edc66df13423f36f52919dfa3......
commit 1b4056686d1b494a5c86757f9eaed844......
commit 53f244ac8730d33b353bee3b24210b07......
commit 3a4226b4a0b6fa68783b07f1cee7b688.......
複製程式碼
歷史記錄是按照時間排序的,時間近的排在前面。
2,git rebase
想要合併1-3條,有兩個方法
1.從HEAD版本開始往過去數3個版本
git rebase -i HEAD~3
複製程式碼
2.指名要合併的版本之前的版本號
git rebase -i 3a4226b
複製程式碼
請注意3a4226b這個版本是不參與合併的,可以把它當做一個座標
3,選取要合併的提交
1.執行了rebase命令之後,會彈出一個視窗,頭幾行如下:
pick 3ca6ec3 '註釋**********'
pick 1b40566 '註釋*********'
pick 53f244a '註釋**********'
複製程式碼
2.將pick改為squash或者s,之後儲存並關閉文字編輯視窗即可。改完之後文字內容如下:
pick 3ca6ec3 '註釋**********'
s 1b40566 '註釋*********'
s 53f244a '註釋**********'
複製程式碼
3.然後儲存退出,Git會壓縮提交歷史,如果有衝突,需要修改,修改的時候要注意,保留最新的歷史,不然我們的修改就丟棄了。修改以後要記得敲下面的命令:
git add .
git rebase --continue
複製程式碼
如果你想放棄這次壓縮的話,執行以下命令:
git rebase --abort
複製程式碼
4.如果沒有衝突,或者衝突已經解決,則會出現如下的編輯視窗:
# This is a combination of 4 commits.
#The first commit’s message is:
註釋......
# The 2nd commit’s message is:
註釋......
# The 3rd commit’s message is:
註釋......
# Please enter the commit message for your changes. Lines starting # with ‘#’ will be ignored, and an empty message aborts the commit.
複製程式碼
5.輸入wq儲存並推出, 再次輸入git log檢視 commit 歷史資訊,你會發現這兩個 commit 已經合併了。