5.2 重寫歷史與精準搬移#
修改最後一次 Commit:git commit --amend#
場景一:剛 commit 完才發現訊息有錯字:
git commit --amend -m "修正後的訊息"
場景二:剛 commit 完才發現少加了一個檔案:
git add 漏掉的檔案
git commit --amend --no-edit # --no-edit 表示不修改訊息
--amend 會用新的 commit 取代最後一次 commit(雜湊值會改變)。
⚠️ 重要原則:已經 push 到遠端的 commit 不要 amend。amend 會改寫歷史,如果隊友已經基於舊的 commit 開發,會造成混亂。amend 只適用於「還沒 push」的本地 commit。
挑選特定 Commit 合併:git cherry-pick#
場景:你在 feature 分支上做了 5 個 commit,但只想把其中一個修正 bug 的 commit 搬到 main 上,不想整條分支合併過來。
git switch main
git cherry-pick a1b2c3d # 把指定雜湊的那個 commit「複製」到 main
cherry-pick 就像它的名字——從一整串 commit 中「挑一顆櫻桃」,把那個 commit 的變更複製一份到目前分支,並產生一個新的 commit(內容相同,雜湊不同)。
常用情境:
- 把某個 bug 修正搬到其他分支
- 從實驗分支中挑出有用的 commit
- 把某個 commit 補到發佈分支(backport)
衝突處理:cherry-pick 也可能遇到衝突,解法與 merge 相同——改好檔案後
git add,然後git cherry-pick --continue。