Git | 修改 commit 相關指令

常常 git commit 之後發現又有 code 需要修改,或是 commit message 寫的不完整,需要再做修改的時候....

Kombayar
Mar 1, 2024

這裡記錄幾個自己很常用來修改 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。(如下圖黃色部分),再推一次,就可以惹。

--

--

Kombayar
Kombayar

Written by Kombayar

I’m a graduate student. Self-teaching coding on Internet, wanted to write some articles to make myself remember the code.

No responses yet