介紹如何使用 git reset
指令刪除遠端分支上含有錯誤的 commit。
錯誤的 Commit
假設我們不小心建立了含有錯誤的 commit,並且推送至遠端 master
分支:
# 加入所有變動的檔案 git add -A # 加入錯誤的 Commit git commit -m "這是錯誤的 Commit" # 推送至遠端 master 分支 git push origin master
查看一下目前的 commit 記錄:
# 查看 Git 記錄 git log --oneline
77a42d5 (HEAD -> master, origin/master, origin/HEAD) 這是錯誤的 Commit ffa7c0c Add another file 05199ef Add a file dd70245 Initial commit
重設 HEAD
若要刪掉剛剛產生的這個錯誤 commit,首先要更改 HEAD
的位置,捨棄錯誤的 commit,往後退到正確的位置,以這個例子來說只要倒退一個 commit 即可:
# 從目前的 HEAD 倒退一個 Commit
git reset HEAD^
Unstaged changes after reset: M test.txt
HEAD
倒退之後,會顯示尚未 add
的檔案。
若要倒退至其他位置,可以參考以下指令:
# 從目前的 HEAD 倒退兩個 Commit git reset HEAD^^ # 從目前的 HEAD 倒退五個 Commit git reset HEAD~5 # 設定 HEAD 為 ffa7c0c 這一個 Commit git reset ffa7c0c # 設定 HEAD 為 ffa7c0c 的前一個 Commit git reset ffa7c0c^
確認目前的 HEAD
位置:
# 查看 Git 記錄 git log --oneline
ffa7c0c (HEAD -> master) Add another file 05199ef Add a file dd70245 Initial commit
設定好 HEAD
之後,就成功把本地端的錯誤 commit 刪掉了,但是遠端的 master
分支尚未修正。
強制推送至遠端分支
使用 git push
加上 --force
強制推送至遠端 master 分支:
# 強制推送至遠端 master 分支 git push origin master --force
這樣遠端 master
分支上面的錯誤 commit 就會不見了。
# 查看遠端分支 Commit 記錄 git log origin/master --oneline
ffa7c0c (HEAD -> master, origin/master, origin/HEAD) Add another file 05199ef Add a file dd70245 Initial commit