github使用詳解

那麼當你執行 git reset --hard 之後,歷史紀錄是不能跟遠程的記錄直接合並的。

舉個例子,遠程是 A -> B -> C -> D,你 git reset --hard 之後是 A -> B。這時候除非遠程那邊抹掉 CD,否則是不能合併的。

因此,這時候,你應該使用 git push origin master --force 來強行覆蓋遠程記錄。

請不要根據提示使用 git pull。否則,你的本地又會變成 A -> B -> C -> D。因爲 git pull 相當於 git fetch + git merge


(以下內容基於上面的例子,遠程是 A -> B -> C -> D,你想回滾到 B 那個狀態)

樓上提到了 git revert。其實,git reset --hardgit revert 都可以實現“回滾代碼”。但區別在於:

git revert 會把你的本地變成 A -> B -> C -> D -> E。其中,E 乾的事兒是刪除 CD。這樣做的好處在於,你 git push origin master 就不會有上面的報錯了。但,歷史線上還是會保留 CD 這兩個 commit。如果使用這個命令,記得要 add 然後 commit

git reset --hard 會直接刪掉 CD,形成 A -> B 這樣的結果。好處在於更直接更徹底。缺點在於,首先要通過 git push origin master --force 去強行更改。其次,一旦你後悔了,除非根據本地的 reflog 直接恢復 HEAD 指針,此外沒有其他辦法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章