[筆記] 不小心 Git push 了含有錯誤內容的 commit 怎麼辦?

狀況:
想要修改已經 push 的 commit,
而且很慘的是,剛剛也不小心已經在 Server 上執行 git pull 了,怎麼辦?

步驟一:修改最後一次的 Commit

完成如 git add 等 commit 變動後,將 git commit 的步驟加上 --amend 參數,如:

(local) $ git commit --amend --no-edit

運用此參數,git 就會直接修改最後一次的 commit,而不會增加新的 commit。
這裡我們又加了 --no-edit 參數,就是不修改原本 commit 訊息的意思。


步驟二:強制 push 遠端分支

接著強制覆寫遠端 git 的分支紀錄

(local) $ git push -f

步驟三:Server 強制 pull

因為 Server 留有錯誤的 commit,所以要透過 rebase 來更改。
(server) $ git pull --rebase

20190213 更新:不對,比較好的做法是 reset,否則錯誤檔案會留在工作目錄。

(server) $ git fetch                       # 先取得最新的樹
(server) $ git reset origin/master --hard  # 再 hard reset 到正確的 origin/master

延伸閱讀

關於各個指令的詳細資訊,以下資料有更完整的敘述和說明: