git高級淺入之當我們需要修改某次commit信息


這節內容主要談兩個比較常見的操作,去修復我們需要修改的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM