這個問題的意義在於,Git提交代碼是先提交到本地,然後再推送到遠端。一些比較嚴格的Git倉庫會有一些代碼提交檢查,一旦檢查到問題就會禁止提交。那麼這個時候就尷尬了,本地已經提交了,但是遠端又推送不上去。基於當前版本作修改再提交也不一定能推送成功,因爲只要提交了,提交記錄就會被檢查,推送還是會被打回。
爲了解決這個問題,可以使用如下命令:
git reset --soft HEAD^
soft表示這是一個軟重置,會把Head指向前一個提交,但是保留本次的更改。另外,有軟就有硬:
git reset --hard HEAD^
硬重置除了會把Head指向前一個提交,還會將本地所作的修改丟棄,一定要謹慎使用,筆者反正是不會嘗試使用的,即使做好了備份。
除了使用HEAD^
這樣的移動方式,還可以直接指定Git的提交ID(唯一SHA-1哈希值):
git reset --soft cc127537978af35e2f502da7e8d22e340ed810e5
最最後,如果還是不行,那就還是祭出“遠端覆蓋本地”大法(本系列博文提交過),先備份,再遠端覆蓋本地,最後修改提交推送。