修改 Git 提交訊息與內容的完整指南
更新日期: 2024 年 12 月 9 日
本文為 GitHub 操作指令教學,第 5 篇:
- GitHub Issue 與 Git Commit 命名指南
- Git Clone:初次複製專案的完整指南
- 使用 git fetch 與 git pull, 從 GitHub 取得最新檔案內容
- Git Ignore:排除檔案的完整指南
- 修改 Git 提交訊息與內容的完整指南 👈 所在位置
- GitHub 上傳檔案完整指南
- 發佈 Pull Request 與重新提交的完整指南
建議閱讀本文前,先閱讀完 Git 指令基本介紹教學 系列文
在 Git 中,提交 (Commit) 是管理版本的核心操作。
提交訊息描述了變更的內容,提交本身則記錄了專案的歷史。
不過,有時我們可能會發現以下問題需要修正:
- 提交訊息包含錯字或描述不清。
- 提交的內容不完整,需要補充或修改。
Git 提供了強大的指令 git commit --amend
,讓我們能夠修改最後一次提交的訊息與內容。
此外,若僅需更新內容而保留原提交訊息,還可以使用 git commit --amend --no-edit
。
本文將詳細介紹這兩個指令的使用情境與操作差異,幫助您更靈活地管理提交歷史。
修改提交訊息:git commit --amend
指令說明
當需要更改最近一次提交的訊息時,可以使用以下指令:
git commit --amend
這會開啟編輯器(通常是 vim
),允許您編輯提交訊息。
編輯提交訊息的步驟
- 進入編輯器
執行git commit --amend
後,進入vim
編輯器,看到當前的提交訊息。 - 進入編輯模式
按下i
鍵進入編輯模式,修改提交訊息。 - 保存與退出
修改完成後,按下Esc
鍵退出編輯模式,然後輸入以下命令保存並退出::wq
案例:修正錯誤的提交訊息
情境: 您提交了一個新功能,但不小心把訊息寫成了錯誤的名稱:
git commit -m "Add new feture" # 錯誤的拼字 "feture"
解決方法:
- 執行以下指令修改提交訊息:
git commit --amend
- 進入編輯器後,將錯誤的訊息修正為正確的內容,例如:
Add new feature
- 保存並退出編輯器(通常是
: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
被遺漏。
解決方法:
- 將遺漏的檔案加入暫存區:
git add auth-helper.js
- 使用
--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(+)
注意事項
- 不要修改已推送的提交
如果提交已推送到遠端,使用--amend
可能導致其他協作者的儲存庫出現問題。
建議僅對尚未推送的提交進行修訂。 - 確認提交狀態
在使用--amend
前,可以執行以下指令確認提交狀態:git log --oneline
小結
git commit --amend
:用於修改最後一次提交的訊息或內容,適合修正錯字或補充提交的檔案。--no-edit
:保留原本的提交訊息,只修改提交的內容。- 與一般提交的差異:
--amend
會替換最後一次提交,而不新增新的提交節點。
透過 git commit --amend
,您可以更靈活地管理提交歷史,確保提交的內容和訊息更加精確!