git rebase 合並多次 commit操作
想要合並n條提交記錄,有兩個方法:
1. 從HEAD版本開始往過去數 n
個版本
git rebase -i HEAD~n
2. 指定一個合並區間 startpoint
和 endpoint
,注意:該區間指定的是一個前開后閉的區間,意思就是startpoint不參與合並:
git rebase -i [startpoint] [endpoint]
- -i 的意思是
--interactive
,即彈出交互式的界面讓用戶編輯完成合並操作 - startpoint 和 endpoint 指定了一個編輯區間
- 如果不指定endpoint,則該區間的終點endpoint默認是當前分支HEAD所指向的提交
操作
1. 執行 git log
查看提交歷史,接下來我們將三次提交合並為一個提交
2. 執行 git rebase -i HEAD~3
,彈出操作窗口
操作說明:
- pick:保留該commit(縮寫:p)
- reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
- edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
- squash:將該commit和前一個commit合並(縮寫:s)
- fixup:將該commit和前一個commit合並,但我不要保留該提交的注釋信息(縮寫:f)
- exec:執行shell命令(縮寫:x)
- drop:我要丟棄該commit(縮寫:d)
根據我們的需求,我們將commit內容編輯如下:
pick 85697ee This is first commit.
squash ee461c1 This is second commit.
squash 326e415 This is third commit.
上面的意思就是把第二次、第三次提交都合並到第一次提交上。
3.然后保存退出,Git會壓縮提交歷史。如果有沖突,需要修改,修改的時候要注意,保留最新的歷史,不然我們的修改就丟棄了
修改以后要記得敲下面的命令:
git add .
git rebase --continue
如果你想放棄這次壓縮的話,執行以下命令:
git rebase --abort
4.如果沒有沖突,或者沖突已經解決,則會出現如下的編輯窗口:
我們將三次提交信息合並成一個提交信息
Commit feature branch!
#This is first commit.
#This is second commit.
#This is third commit.
5.編輯完保存即可完成commit的合並了,我們執行一下 git log