這節內容主要談兩個比較常見的操作,去修復我們需要修改的commit信息。
有時候,我們會發現我們所提交的信息可能寫錯了,需要修改怎么辦?這種情況主要分為以下兩種:
- 修改最近一次的提交信息
- 修改指定的某一次提交信息
1. 使用git commit amend修改最近一次的提交信息
在git初級淺入的那一章有簡單的談到這一操作,今天我們再來討論一下。
git commit --amend 更改最近一次提交的信息,這個操作就優秀了,目前我發現的大致是以下兩個用處
- 1.比如我上一次提交的是修改了某個bug,這一次我又是修改了那個bug,然后我要將這一次的修改和上一次的提交用同一個commit備注,那么你可以使用這個命令,將會使用上一次的commit備注信息,同時生成一個新的commitId,
- 2.你想把本次的修改提交到上一次的提交中,並且把上一次備注的提交信息改成這次的
實際實踐一下看看:我們先新建一個倉庫,然后創建個test.js文件,然后commit一下,然后我們要修改這一次commit的信息。
我們先git log當前狀態如下
然后git commit --amend進入編輯
我們修改上一次提交信息,把它改成 [fix]: try git commit --amend,然后保存退出,git log看一下
我們觀察上述結果,發現已經將上一次的提交信息給更改為我們想要修改的內容了,並且我們會發現,當前commit已經合並了上一次commit生成了新的id。
那么,我們需要修改的commit信息不是最近一次的咋辦?
2. 使用git rebase -i 來修改某一次的提交信息
2.1 先鋪墊下知識點
git rebase -i master^^ // 假設我們當前在master分支
上面兩個^是什么鬼?上述操作在分支名后總共可以放兩個字符,一個是一個是~,具體規則如下
- ^ 的用法:在 commit 的后面加一個或多個 ^ 號,可以把 commit 往回偏移,偏移的數量是 ^ 的數量。例如:master^^表示 當前master 指向的 commit 之前倒數第2個 commit
- ~ 的用法:在 commit 的后面加上 ~ 號和一個數,可以把 commit 往回偏移,偏移的數量是 ~ 號后面的數。例如:master~2 表示的和master^^是一樣操作。
2.2說一點點我們就可以在實踐上理解一下了
2.2.1 我們依然是從頭開始(避免理解亂套),新建一個倉庫,新建一個文件test.js,然后提交個4次,如下圖
2.2.2 ok!准備工作完畢后,我們就來改下倒數第二個提交信息‘[feat]: add b’,將它改為'[fix]: try git rebase -i master^^ '。
git rebase -i master^^
2.2.3 輸入上面命令,進入如下
2.3.4 接下來可以操作的命令都在上圖中顯示了,我們要做的是編輯,並且要編輯的是第一行(它的排列順序是一個正序排序,也就是說舊的commit信息在上面,新的commit在下面),我們將pick改為edit,vim操作大概是輸入i -> 將pick改為edit -> esc -> :wq
2.3.5 然后退出保存后,顯示如下
git commit --amend
2.3.6 輸入如上命令,我們就可以去修改倒數第二個提交信息了
等會!等會!上面命令不是我們上面修改最后一次commit的信息的操作嗎?對,沒錯,那么我們思考下剛剛我們操作是干了什么?其實,我們剛剛使用rebase將最新一次的commit基准定到了倒數第二個。那我們輸入完上面命令后看看效果。
2.3.7 然后操作和第一個操作一樣
2.3.8 改完信息后,我們還需要git rebase --continue,將基准從當前倒數第二位置移到最新一次提交
2.3.9 git log看下狀態
看上圖,我們會發現我們已經將倒數第二次的提交信息給改了
2.3 接下來通過動圖看看,剛剛操作干了什么
git amend -i master^^的時候,它做了這樣一件事情
然后git commit --amend和git rebase continue的時候,它干了這樣一件事情
2.4 小結
從宏觀上來說分為三步,1.git rebase -i 分支~移動數字 2. 選擇對應操作 3.git commit --amend和git rebase continue