修改 Git 提交訊息與內容的完整指南

更新日期: 2024 年 12 月 9 日

在 Git 中,提交 (Commit) 是管理版本的核心操作。

提交訊息描述了變更的內容,提交本身則記錄了專案的歷史。

不過,有時我們可能會發現以下問題需要修正:

  1. 提交訊息包含錯字或描述不清。
  2. 提交的內容不完整,需要補充或修改。

Git 提供了強大的指令 git commit --amend,讓我們能夠修改最後一次提交的訊息與內容。

此外,若僅需更新內容而保留原提交訊息,還可以使用 git commit --amend --no-edit

本文將詳細介紹這兩個指令的使用情境與操作差異,幫助您更靈活地管理提交歷史。


修改提交訊息:git commit --amend

指令說明

當需要更改最近一次提交的訊息時,可以使用以下指令:

git commit --amend

這會開啟編輯器(通常是 vim),允許您編輯提交訊息。


編輯提交訊息的步驟

  1. 進入編輯器
    執行 git commit --amend 後,進入 vim 編輯器,看到當前的提交訊息。
  2. 進入編輯模式
    按下 i 鍵進入編輯模式,修改提交訊息。
  3. 保存與退出
    修改完成後,按下 Esc 鍵退出編輯模式,然後輸入以下命令保存並退出: :wq

案例:修正錯誤的提交訊息

情境: 您提交了一個新功能,但不小心把訊息寫成了錯誤的名稱:

git commit -m "Add new feture"  # 錯誤的拼字 "feture"

解決方法

  1. 執行以下指令修改提交訊息: git commit --amend
  2. 進入編輯器後,將錯誤的訊息修正為正確的內容,例如: Add new feature
  3. 保存並退出編輯器(通常是 :wq)。

結果: 提交訊息已更新,查看提交歷史確認修改:

git log --oneline

輸出:

abcd123 (HEAD -> main) Add new feature

修改提交內容但保留訊息:git commit --amend --no-edit

有時候需要修正提交的檔案內容,但提交訊息不需要更改。此時可以使用:

git commit --amend --no-edit

這會將新的檔案變更合併到最後一次提交,而不修改原本的提交訊息。

git commit --amend 與一般提交的差異

以下是一般提交與 git commit --amend 的行為比較。

一般提交的流程

當使用 git commit -m "訊息" 時,每次提交都會產生一個新的節點:

初始狀態:    A -- B [HEAD]
執行提交:    A -- B -- C [HEAD]
  • 每次提交(如 C)都會成為一個新的提交點,加入歷史中。

使用 git commit --amend 的流程

當使用 git commit --amend 時,最後一次提交會被替換,而不新增新的節點:

初始狀態:    A -- B [HEAD]
執行修訂:    A -- B' [HEAD]
  • B 被替換為 B'B' 是修改後的新提交,原本的 B 會從歷史中移除。
  • 此操作會改變提交歷史,因此只適用於尚未推送到遠端的提交。

案例:補充遺漏的檔案

情境: 您提交了一個功能,但忘記將一個重要檔案納入提交:

git commit -m "Add login functionality"

稍後發現檔案 auth-helper.js 被遺漏。

解決方法

  1. 將遺漏的檔案加入暫存區:
 git add auth-helper.js
  1. 使用 --no-edit 更新最後一次提交:
git commit --amend --no-edit

結果

  • 提交的內容更新,包含了新的檔案。
  • 提交訊息保持不變: Add login functionality

查看提交歷史:

git log --stat

輸出顯示最新提交已包含補充的檔案:

commit abcd123 (HEAD -> main)
Author: Your Name <email@example.com>
Date:   Mon Dec 9 10:00:00 2024

    Add login functionality

 auth-helper.js | 10 ++++++++++
 1 file changed, 10 insertions(+)

注意事項

  1. 不要修改已推送的提交
    如果提交已推送到遠端,使用 --amend 可能導致其他協作者的儲存庫出現問題。

    建議僅對尚未推送的提交進行修訂。
  2. 確認提交狀態
    在使用 --amend 前,可以執行以下指令確認提交狀態: git log --oneline

小結

  • git commit --amend:用於修改最後一次提交的訊息或內容,適合修正錯字或補充提交的檔案。
  • --no-edit:保留原本的提交訊息,只修改提交的內容。
  • 與一般提交的差異--amend 會替換最後一次提交,而不新增新的提交節點。

透過 git commit --amend,您可以更靈活地管理提交歷史,確保提交的內容和訊息更加精確!

Similar Posts