Git | 修改 commit 相關指令
這裡記錄幾個自己很常用來修改 commit 的 git 指令,但前提是 commit 都還沒有被 push 或 merge 至主線時!
1. 未 push 前,修改 commit message
git commit --amend
會顯示vim視窗,可以查看commit id是否相同,按 I 進行修改,修改完先按幾下 esc 結束編輯,再輸入 :wq!,儲存修改並離開。
離開後可以再透過 Log 確認 commit message 有沒有修改。
git log
2. 未 push 前,修改 commit code (回到某一版的 commit)
可以先使用 git log 看要回復到哪一筆的 commit,並記下要回復那筆 commit 的 commit ID。(以下範例為回到 commit ID 為 088e585b2c31959001fe78afad645b54d2aed9e4 的那筆 commit )
- 取消 commit,不取消 add,不刪除更改程式碼
git reset --soft 088e585b2c31959001fe78afad645b54d2aed9e4
- 取消 commit,取消 add,不刪除更改程式碼
git reset --mixed 088e585b2c31959001fe78afad645b54d2aed9e4
- 取消 commit,取消 add,刪除更改程式碼
git reset --hard 088e585b2c31959001fe78afad645b54d2aed9e4
此動作都會取消 commit,做完從新 add 後修改過後的 code 之後,要重新執行 commit。
3. 未 push 前,取消第一筆 commit
由於第一筆 commit 沒有上一筆或前幾筆 commit 的 commit ID 可以回復,因此可以使用以下指令,直接取消 commit,不取消 add。
git update-ref -d HEAD
若要再取消 add,可以執行以下指令,若要全部取消 add,就不用帶 <file>。
git reset <file>
*小補充:
若有使用 Gerrit review 系統,已經將一筆 code 推出去,狀態為待 review 尚未被 merge 至主線時,也可以使用以上方法對 commit 內容進行修改,但修改完成之後要在 commit message 的最後加上當筆 commit 的 change ID。(如下圖黃色部分),再推一次,就可以惹。