通過下面兩個git rebase
的應(yīng)用篙螟,我們也學(xué)習(xí)一下git rebase
交互模式的使用劫笙。
(一)修改更早commit的message(重點)
這個命令非常有用推捐,對提交歷史進行變更梳庆,非用不可的命令贯吓。
1瞒爬、先來看下歷史日志
我的需求是修改第三次的commit的message弓柱。
2、查看第三次提交的詳細信息
執(zhí)行git log + commit_ID
侧但,會把該對應(yīng)commit和他之前的commit的詳細信息都顯示出來矢空。看第一個commit信息禀横,就是我們需要的屁药。
從圖中可以看出,分支中第三次提交的message信息是:在temp分支提交temp-test.txt文件
柏锄。
3酿箭、修改第三次提交的message。(重點)
需要用到命令:git rebase
趾娃,變基的操作可以進行交互式操作七问,需要用到參數(shù)-i
。
這里需要注意一下:
- 我們對
temp
分支的第三次提交的message進行變更茫舶,因為message是作為commit數(shù)據(jù)結(jié)構(gòu)當中的一個屬性械巡,所以如果要對message進行變更,那么該commit的ID號是肯定要做改變的饶氏。 - 其次要變更第三個提交的message信息讥耗,這個
rebase
(變基)中這個基,要選擇被變更提交的父親提交為基準點疹启。(這個很重要)
(1)執(zhí)行變基操作
執(zhí)行命令:git rebase -i + 父commit_ID
執(zhí)行上述命令后古程,會跳轉(zhuǎn)到一個交互頁面上。
接下來詳細介紹一下交互頁面中的內(nèi)容:
這個頁面的意思是說喊崖,你在做變基(rebase)的時候挣磨,針對某一個commit進行處理策略雇逞。
- 第一行
pick 4f890b5 在temp分支提交temp-test.txt文件
說明:
pick
:意思是挑選,我們可以把pick
的位置茁裙,換成對應(yīng)的策略塘砸,來重新編輯該提交。
也就是pick
的位置表示對該commit進行怎樣的處理晤锥,后邊表示要處理的是哪個commit掉蔬。 - 注釋中
commands
下邊就是各種策略(命令)的介紹。 - 我們這里介紹用到這次用到的命令矾瘾。(其他的以后在擴展)
我們現(xiàn)在要用的策略就是reword
女轿,
r,reword <commit>=use commit壕翩,but edit the commit message
意思是該提交的歷史變更信息是要保留的蛉迹,但是我需要修改這個提交中的message信息。
提示:用r
和reword
都可以放妈,r
表示簡寫婿禽。
(2)編輯修改提交的策略
因為我們要改變4f890b5
提交的message,所以就需要reword
命令大猛。
修改4f890b5
的策略
我們只修改第三次提交扭倾,其他的提交不改變。
然后退出保存(:wq!
)即可挽绩。
(3)編輯提交內(nèi)容
上一步操作退出后膛壹,還會跳轉(zhuǎn)到一個新的交互頁面,如下圖:
編輯第一行的mesage的信息唉堪。保存退出模聋。
提示:帶#
號表示備注,在提交的message中是不會出現(xiàn)的唠亚。
出現(xiàn)下圖链方,表示修改成功了。
對提示信息說明:
-
Successfully rebased and updated refs/heads/temp.
:顯示執(zhí)行成功灶搜,其實他完成了兩個步驟祟蚀,前邊的rebase
幫我們把message處理完畢,后邊還把該提交的HEAD指針(commit-id)進行了更新割卖。 - 其實我們在仔細看一下前酿,第二行的開頭
detached HEAD ed6984e
,說明是分離頭指針狀態(tài)鹏溯,且ed6984e
提交是我們之前沒有的提交罢维。 - 分離頭指針狀態(tài)其實他有些時候是很有用的,就像現(xiàn)在這個變基
rebase
操作丙挽,是離不開分離頭指針的肺孵,只不過這是一個完整的變基行為匀借,我們無法查看到具體的細節(jié)。Git先變成分離頭指針狀態(tài)平窘,把HEAD指針指向了基準點吓肋,然后在上邊做調(diào)整,調(diào)整完畢之后提交初婆,把HEAD指針執(zhí)行最新的提交蓬坡,如此循環(huán)把后邊的提交也補充上猿棉,就這完成以提交為基準點的變基磅叛。
(4)查看版本庫中的歷史提交日志
通過以上步驟,我們把第三次提交的massage信息修改完成了萨赁。
而第三次提交的commit-id也發(fā)生了改變弊琴,之前是4f890b5
,而現(xiàn)在是ed6984e
這里重點說明:
使用git rebase
命令進行修改指定提交的操作杖爽,實際上是以該指定提交的父提交為基準點敲董,進行的變基操作。
不單單第三次提交的commit-id發(fā)生了改變慰安,且之后所有的提交的commit-id都發(fā)生了改變腋寨。
(5)最后,特別要注意
上邊所講的變基(rebase)的行為化焕,是正在自己的分支上做變更萄窜,還沒有貢獻到團隊的共享分支上。