常常有如下這些需求:git
這裏還分兩種情形,一種是要重寫本地倉庫的 commit。第二種是已經 push commit 到遠程倉庫。web
常見技巧:選擇 push 到遠程倉庫要慎重,須要是你已經有充足的信心及把握提交代碼(並且代碼也是可信任的)。由於一旦提交到遠程,別人從遠程 clone 下來了,這時候你再要去重寫歷史,就須要別人作一些額外的操做才能保持同步。編輯器
舉幾個簡單技巧的實例:flex
好比,咱們如今有 3 個 commit,信息以下:ui
git commit --amend -m 'feat: add 3 after change'
複製代碼
執行成功url
請注意,這時候 hash 值已經變化了,commit hash 值由原 ae2a029 => fcfd33cspa
舉例:3d
當前 master 分支,有 3 個 commit,按照從舊到新分別是 add 一、二、3code
此時,若是你要修改 add 2 和 add 3 的 commit 信息,此時則取出要更改的最先的 commit 的父 commitcdn
好比,執行
git rebase -i eb303949e839cbfc1e4ab531e3f33439789369d3
複製代碼
其中, eb303949e839cbfc1e4ab531e3f33439789369d3 是 commit: add 1 的 hash 值。
出現文本編輯頁面。注意,此時的 commit 的順序,和正常看的 commit 信息是反的,由於是 rebase 操做,因此要從最先提交的子 commit 開始 rebase,因此這也是爲何反了的緣由。
介紹下常見的名詞解釋:
pick,使用該 commit 改動和 commit 信息
reword 使用該 commit 改動,可是能夠更改 commit 信息(同 git commit --amend -m 效果),推薦使用這個更改多個 commit 信息,由於比 edit 更少操做步驟
edit, 使用該 commit 改動,可是能夠更改 commit 信息(會在每次要更改 commit 前須要手動執行 git commit --amend)
squash, 使用該 commit 改動,可是 commit 信息取前一個 commit 信息,也就是將該 commit 和前一個 commit 合併
好比,你想將 commit: add 2 信息更改爲:add 2 after change,那麼能夠在文本編輯狀態時將 pick 更改爲 edit,如下而後輸入 :wq 保存
此時會出提示
這時 head 正處於 rebasing 狀態,而後就和上面用 amend 使用是同樣的,輸入
git commit --amend
複製代碼
則會出現下面文本提示:
此時,作出你想要作的 commit 修改,好比將 add 2 改爲 add 2 after change 而後輸入 :wq 保存,以下圖
此時看 git log 能夠看到:
當前 rebase 的 head 的 commit 信息已經被修改。因爲還處於 rebasing 狀態,因此咱們須要執行:
git rebase --continue
複製代碼
此時提示:
此時,查看 git 歷史,已修改爲功,hash 值也都相應更新了:
輸入 :wq 保存後會當即進入編輯第一個 reword 的 commit 信息的文本編輯狀態,即編輯:feat: add 2 的地方,此時進行文本編輯:feat: add 2 => feat: add 2 after reword
編輯好 commit 信息後輸入 :wq 保存,此時進入第二個 reword 的 commit 信息的文本編輯狀態,此時進行文本編輯:feat: add 3 => feat: add 3 after reword
編輯好 commit 信息後輸入 wq 保存,即修改爲功
要將最新的 commit 和最新的第二個 commit 信息合併,同理使用 rebase:
git rebase -i xxx // xxx 爲父commit的hash
複製代碼
此時,將最新的 commit 改爲:squash,以下圖:
按下 wq 進行保存,則進入 commit 信息編輯頁面
好比,將 commit 信息寫成:feat: add 2 use reword and 3 use reword
按下 wq 進行保存
由此看到,commit 已經合併,並且 commit 信息也是 feat: add 2 use reword and 3 use reword
若是已經 push 到遠程,則能夠本地重寫歷史後,進行一次 push,此時該分支的 head 節點已經改變,建議讓協同者刪除本地分支,拉去你剛剛 push 的分支,再進行後續更改
更多精彩文章能夠看個人博客,若有錯誤,歡迎指正
本文使用 mdnice 排版