git修改最後一個commit(修改檔案)
Contents
git commit --amend 是 Git 中非常實用的指令,可以修改最後一次 commit 的內容,包括修改檔案、修改 commit 訊息、甚至修改 author 資訊。
基本用法:修改最後一個 commit 的檔案
當你發現剛剛 commit 後漏掉了某些修改,或 commit 的檔案有誤,可以用以下流程補救:
|
|
--no-edit 參數表示不修改 commit 訊息,直接把暫存區的變更加入最後一個 commit。
修改 Commit 訊息
如果只想修改 commit 訊息,不改檔案內容:
|
|
或省略 -m,Git 會開啟編輯器讓你直接編輯:
|
|
修改 Commit 的 Author
若需要修正 commit 的作者資訊:
|
|
已 Push 的 Commit 如何處理
若已經 push 到遠端,amend 後會因為 commit hash 改變,導致本地與遠端歷史不同步,需要 force push:
|
|
--force vs --force-with-lease 的差異
| 指令 | 說明 |
|---|---|
--force |
強制覆蓋遠端,完全不管別人是否有新的 push |
--force-with-lease |
在 push 前會確認遠端沒有其他人新增的 commit,較安全 |
--force-with-lease 能防止你不小心覆蓋掉其他人剛推上去的 commit,是 force push 時的最佳實踐。
協作時的注意事項
不要對已經 push 到公共分支的 commit 使用 --amend!
原因:
git commit --amend實際上是建立一個全新的 commit(hash 不同),原本的 commit 被丟棄- 若其他團隊成員已經基於舊的 commit 做了新的工作,force push 後他們的歷史會與遠端不符
- 其他人需要用
git rebase或重新 clone 來解決,造成團隊困擾
安全的使用原則:
--amend只在本地未 push 的 commit 上使用- 若一定要修改已 push 的 commit,確認沒有其他人拉取該分支,且團隊成員都知情