是這樣的,最近在和別人一塊兒作項目的時候,夥伴在上傳他的代碼時,由於上傳速度比較慢,他覺得是卡機了,因此關掉git bash,從新上傳,重複了幾回,最後致使Github上面的代碼亂碼,而我卻把上面亂碼的代碼pull下來,致使個人也亂碼。git
由於咱們以前的commit的版本沒有問題,因此以前的代碼沒事,那麼咱們須要解決的就是實現版本回退,就能夠把代碼恢復至最後一次成功提交的記錄。github
前提是你已經熟悉掌握如何使用git操做本地倉庫和遠程倉庫的更新。bash
我本身建立了一個文件夾 TestGit,裏面有兩個文件,我按兩次分別上傳到GitHub上面 字體
而後咱們要作的就是把本地的項目文件和Github倉庫恢復至只有一個** 1、正常版本.txt** 文件。code
$ git log
經過這個命令能夠查看歷史提交版本,我提交了兩個版本,因此顯示兩個提交版本排序
這些版本都是按提交時間排序的,最後提交的排在最上面。而每個版本都會有個id,你們能夠看到黃色字體commit後面跟着的一寸數字就是每次提交版本的id。rem
當咱們但願退回到上一個版本時能夠使用字符串
git reset --hard HEAD^
當咱們但願退回上兩個版本時能夠使用it
git reset --hard HEAD^^
固然,往上100個版本就直接亂碼
git reset --hard HEAD~100
OK,那麼我執行一下 git reset --hard HEAD^
果真,能夠恢復到正常版本了。
固然,咱們也會有可能次日打開電腦想恢復錯誤版本,咱們使用git log
是不會顯示那個版本的,那麼咱們能夠經過如下命令:
git reflog
這個命令能夠查看咱們每一次的命令,能夠看到咱們的錯誤版本在這裏能夠查看的到,每一行前面的黃色字符串就是咱們版本的id,當咱們須要恢復這些版本時,能夠經過這些id來恢復。
當咱們想恢復到指定版本時,能夠經過如下命令
git reset --hard commit_id
例如,我恢復id爲a016fa8的錯誤版本時,以下:
果真恢復了!
咱們在本地回退了版本以後,github並無回退版本,此時咱們須要將它push到github倉庫中。咱們能夠經過如下命令:
git push <remote> HEAD --force
爲此,我將本身的commit回退到只有正常的版本,這是我本地文件狀態:
這是個人github項目中的狀態:
下面我將本地的版本推送到github
好了,剛失戀,寫完這個算是當作一種宣泄吧,你們晚安。