Git reset
git reset
命令可將目前工作副本的 HEAD
指向先前的某一次 commit,通常表示要放棄近期的某個或某些 commits,以便將本機的 repository 回復至先前的某個版本。
此命令有三種模式:soft、hard、和 mixed。這裡只介紹 hard 模式,相關細節請參考文件:git-reset。
範例:
git reset --hard HEAD~ # 倒退一個 commit
git reset --hard HEAD~2 # 倒退兩個 commit
git reset --hard HEAD~3 # 倒退三個 commit
git reset --hard 6f3efa2d # 倒退至指定的 commit ID
加上 --hard
參數表示那些跳過的 commits 全都不要了。
Push to remote
使用 git reset
變更本機的工作副本之後,還必須把變更推送至遠端的來源 repository,否則下次 git pull
又會從遠端把剛才跳過的 commits 恢復,並將 HEAD
指向最新版本。
推送的命令必須加上 --force
參數如下:
git push -force
要提醒的是,如果此分支是一個受保護的分支(GitHub 和 GitLab 皆有此功能),那麼上述命令會失敗。以 GitLab 為例,錯誤訊息會是:
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
解決方法是暫時解除該分支的保護:至 GitLab 網站,進入專案的管理頁面,然後進入 Settings > Repository > Protected branches,找到分支後,將它 Unprotect
,或者把該分支的 Allowed to force push
選項開啟。然後再執行一次 git push -f
命令。
成功推送至遠端後,記得恢復該分支的保護。
警告
此操作應該只用於自己獨立工作的分支上,絕對不要任用使用於多人共同協作的分支,例如 main 和 develop。場合。因為你透過強制 push 操作來「刪除」遠端 repo 中的那些 commits 可能已經被其他人拉回本機繼續修改,而當他們改完要推送變更至遠端 rep 時會被拒絕,所機魚的分支已經不存在了。
See also:
先這樣,也許有空時會再更新。 我的其他站點:
Last modified: 2024-08-31