前言
以前當(dāng)我git提交信息出現(xiàn)錯(cuò)誤的時(shí)候,如果是最近的一次提交,我會(huì)使用Sourcetree提交選項(xiàng)中的“更正上一次提交”(git --amend
)來(lái)補(bǔ)充或修改;但如果不是最新的一次提交,事情可能就有點(diǎn)麻煩了,我可能會(huì)將錯(cuò)誤提交之后的每一條提交都創(chuàng)建補(bǔ)丁,然后再重置(強(qiáng)行合并)到錯(cuò)誤的提交,使用“更正上一次提交”修正后,再一條一條應(yīng)用之前打好的補(bǔ)丁,這一套操作很繁瑣,而且可能出現(xiàn)人為錯(cuò)誤。
其實(shí)上面的一套操作git rebase
都給我們提供了封裝,簡(jiǎn)化操作,可以實(shí)現(xiàn)對(duì)歷史提交記錄的一些操作,可以實(shí)現(xiàn)以下操作:
- 修改歷史提交信息
- 修改歷史提交順序
- 合并歷史提交
- 刪除歷史提交
- 修改歷史提交內(nèi)容,如插入提交,將一次提交劃分為兩次等
rebase變基分支的功能本文暫不涉及,這也是基礎(chǔ)用法。
下面主要記錄在Sourcetree中使用rebase 修改歷史提交的方法
一、修改歷史提交信息
目標(biāo):修改“first commit”為“first commit - changed”
-
右鍵需要修改提交的前一條提交,選擇“交互式變基xxx的子提交...”,會(huì)出現(xiàn)以下頁(yè)面
圖1 -
雙擊需要修改的提交的描述,或選中需要修改的提交后點(diǎn)擊左下角“編輯信息”,重新編輯提交信息。(也可以同時(shí)編輯多個(gè)歷史提交記錄)
圖2 -
依次點(diǎn)擊確認(rèn)即可
圖3
二、修改歷史提交順序
目標(biāo):交換“first commit”和“second commit”的順序
- 同上面第一步,出現(xiàn)如圖1界面
- 鼠標(biāo)拖動(dòng)提交為更正的順序即可
-
依次點(diǎn)擊保存
圖4
三、合并歷史提交
目標(biāo):合并“first commit” 和 “second commit”為一次提交
- 同上面第一步,出現(xiàn)如圖1界面
-
鼠標(biāo)拖動(dòng)提交,使兩個(gè)提交重疊,如下
圖5 -
可修改合并后的描述,點(diǎn)擊確定即可
圖6
四、刪除歷史提交
目標(biāo):刪除“merge first and second commit”提交
- 同上面第一步,出現(xiàn)如圖1界面
- 選中需要?jiǎng)h除的提交,點(diǎn)擊下面刪除按鈕,點(diǎn)擊確定即可
五、修改歷史提交
目標(biāo):將“merge first and second commit”提交劃分為兩次提交
修改的操作相比前面要多一些。
同上面第一步,出現(xiàn)如圖1界面
-
勾選需要修改的提交的“更正提交”選項(xiàng)
圖7 -
點(diǎn)擊確認(rèn),出現(xiàn)分離的HEAD
圖8 -
右鍵HEAD的前一條提交,選擇“重置到這次提交”,并進(jìn)行混合合并
圖9 -
這樣需要修改的提交的內(nèi)容就存在于工作區(qū)中,重新分次提交
圖10 -
點(diǎn)擊工具欄“動(dòng)作”,選擇“繼續(xù)變基”
圖11 -
完成
圖12
總結(jié)
git rebase 命令很強(qiáng)大,但也不能過(guò)度依賴(lài)。因?yàn)樗鼤?huì)將修改的歷史提交之后的提交一并重新提交,會(huì)導(dǎo)致不需要修改的提交的SHA和提交日期一并被修改,可能在某些場(chǎng)景并不適用。