通過下面兩個git rebase
的應用,我們也學習一下git rebase
交互模式的使用。
(一)修改更早commit的message(重點)
這個命令非常有用,對提交歷史進行變更,非用不可的命令。
1、先來看下歷史日誌
我的需求是修改第三次的commit的message。
2、查看第三次提交的詳細信息
執行git log + commit_ID
,會把該對應commit和他之前的commit的詳細信息都顯示出來。看第一個commit信息,就是我們需要的。
從圖中可以看出,分支中第三次提交的message信息是:在temp分支提交temp-test.txt文件
。
3、修改第三次提交的message。(重點)
需要用到命令:git rebase
,變基的操作可以進行交互式操作,需要用到參數-i
。
這裏需要注意一下:
- 我們對
temp
分支的第三次提交的message進行變更,因爲message是作爲commit數據結構當中的一個屬性,所以如果要對message進行變更,那麼該commit的ID號是肯定要做改變的。 - 其次要變更第三個提交的message信息,這個
rebase
(變基)中這個基,要選擇被變更提交的父親提交爲基準點。(這個很重要)
(1)執行變基操作
執行命令:git rebase -i + 父commit_ID
執行上述命令後,會跳轉到一個交互頁面上。
接下來詳細介紹一下交互頁面中的內容:
這個頁面的意思是說,你在做變基(rebase)的時候,針對某一個commit進行處理策略。
- 第一行
pick 4f890b5 在temp分支提交temp-test.txt文件
說明:
pick
:意思是挑選,我們可以把pick
的位置,換成對應的策略,來重新編輯該提交。
也就是pick
的位置表示對該commit進行怎樣的處理,後邊表示要處理的是哪個commit。 - 註釋中
commands
下邊就是各種策略(命令)的介紹。 - 我們這裏介紹用到這次用到的命令。(其他的以後在擴展)
我們現在要用的策略就是reword
,
r,reword <commit>=use commit,but edit the commit message
意思是該提交的歷史變更信息是要保留的,但是我需要修改這個提交中的message信息。
提示:用r
和reword
都可以,r
表示簡寫。
(2)編輯修改提交的策略
因爲我們要改變4f890b5
提交的message,所以就需要reword
命令。
修改4f890b5
的策略
我們只修改第三次提交,其他的提交不改變。
然後退出保存(:wq!
)即可。
(3)編輯提交內容
上一步操作退出後,還會跳轉到一個新的交互頁面,如下圖:
編輯第一行的mesage的信息。保存退出。
提示:帶#
號表示備註,在提交的message中是不會出現的。
出現下圖,表示修改成功了。
對提示信息說明:
-
Successfully rebased and updated refs/heads/temp.
:顯示執行成功,其實他完成了兩個步驟,前邊的rebase
幫我們把message處理完畢,後邊還把該提交的HEAD指針(commit-id)進行了更新。 - 其實我們在仔細看一下,第二行的開頭
detached HEAD ed6984e
,說明是分離頭指針狀態,且ed6984e
提交是我們之前沒有的提交。 - 分離頭指針狀態其實他有些時候是很有用的,就像現在這個變基
rebase
操作,是離不開分離頭指針的,只不過這是一個完整的變基行爲,我們無法查看到具體的細節。Git先變成分離頭指針狀態,把HEAD指針指向了基準點,然後在上邊做調整,調整完畢之後提交,把HEAD指針執行最新的提交,如此循環把後邊的提交也補充上,就這完成以提交爲基準點的變基。
(4)查看版本庫中的歷史提交日誌
通過以上步驟,我們把第三次提交的massage信息修改完成了。
而第三次提交的commit-id也發生了改變,之前是4f890b5
,而現在是ed6984e
這裏重點說明:
使用git rebase
命令進行修改指定提交的操作,實際上是以該指定提交的父提交爲基準點,進行的變基操作。
不單單第三次提交的commit-id發生了改變,且之後所有的提交的commit-id都發生了改變。
(5)最後,特別要注意
上邊所講的變基(rebase)的行爲,是正在自己的分支上做變更,還沒有貢獻到團隊的共享分支上。