在git中,rebase可以對(duì)某一段線性提交歷史進(jìn)行編輯、刪除、復(fù)制、粘貼操作,常用于合并commit和將某一段commit粘貼到另一個(gè)分支上,語法為“git rebase 參數(shù) [startpoint] [endpoint]”。
本文操作環(huán)境:Windows10系統(tǒng)、Git2.30.0版、Dell G3電腦。
git中rebase的用法是什么
rebase在git中是一個(gè)非常有魅力的命令,使用得當(dāng)會(huì)極大提高自己的工作效率;相反,如果亂用,會(huì)給團(tuán)隊(duì)中其他人帶來麻煩。它的作用簡要概括為:可以對(duì)某一段線性提交歷史進(jìn)行編輯、刪除、復(fù)制、粘貼;因此,合理使用rebase命令可以使我們的提交歷史干凈、簡潔!
前提:不要通過rebase對(duì)任何已經(jīng)提交到公共倉庫中的commit進(jìn)行修改(你自己一個(gè)人玩的分支除外)
1.合并多個(gè)commit為一個(gè)完整commit
當(dāng)我們?cè)诒镜貍}庫中提交了多次,在我們把本地提交push到公共倉庫中之前,為了讓提交記錄更簡潔明了,我們希望把如下分支B、C、D三個(gè)提交記錄合并為一個(gè)完整的提交,然后再push到公共倉庫。
現(xiàn)在我們?cè)跍y(cè)試分支上添加了四次提交,我們的目標(biāo)是把最后三個(gè)提交合并為一個(gè)提交:
這里我們使用命令:
git rebase -i [startpoint] [endpoint]
其中-i的意思是–interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個(gè)編輯區(qū)間,如果不指定[endpoint],則該區(qū)間的終點(diǎn)默認(rèn)是當(dāng)前分支HEAD所指向的commit(注:該區(qū)間指定的是一個(gè)前開后閉的區(qū)間)。
在查看到了log日志后,我們運(yùn)行以下命令:
git rebase -i 36224db
或:
git rebase -i HEAD~3
然后我們會(huì)看到如下界面:
上面未被注釋的部分列出的是我們本次rebase操作包含的所有提交,下面注釋部分是git為我們提供的命令說明。每一個(gè)commit id 前面的pick表示指令類型,git 為我們提供了以下幾個(gè)命令:
-
pick:保留該commit(縮寫:p)
-
reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
-
edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
-
squash:將該commit和前一個(gè)commit合并(縮寫:s)
-
fixup:將該commit和前一個(gè)commit合并,但我不要保留該提交的注釋信息(縮寫:f)
-
exec:執(zhí)行shell命令(縮寫:x)
-
drop:我要丟棄該commit(縮寫:d)
根據(jù)我們的需求,我們將commit內(nèi)容編輯如下:
然后是注釋修改界面:
編輯完保存即可完成commit的合并了:
推薦學(xué)習(xí):《Git教程》