git各類狀態下撤銷修改的方法

使用git時會出現各類各樣的問題,下面是幾種狀況下怎麼反悔的操做git

一,未加入緩存區,撤銷文件修改

     git checkout -- filegithub

二,已加入緩存區,撤銷文件提交

     git reset HEAD file緩存

     或git rm --cached file服務器

三,已提交到本地,回滾提交

     git reset --HARD commit_id/HEAD^n網站

四,已push到遠程

1,git revert的方式spa

 

      1)git revert commit_id   //將要撤銷的提交revert爲一次新的提交,這樣不只提交被撤銷了,並且本地分支也比遠程分支多一次提交rem

      2)git push origin master //推送到遠程it

      這種方式是最方便的,但缺點是多了2次無用的commit,使整個分支的commit再也不整潔。ast

 

2,若是遠程倉庫不是使用git init --bare創建的裸倉庫(裸倉庫沒法回滾提交),而是一個普通倉庫(經過git init創建),那麼你能夠登陸到遠程服務器,而後回滾遠程分支,而後再把本地分支回滾。登錄

      

3,可刪除遠程分支,而後回滾本地分支,而後將本地分支push到origin

          1)git branch xxx_backup                                //建立備份分支

          2)git push origin xxx_backup:xxx_backup  //將備份分支推送到origin

          3)git checkout  xxx                                           //切回要撤銷修改的分支

          4)git reset --hard commit_id                          //撤銷本地commit

          5)git push origin :xxx                                      //刪除遠程xxx分支

          6)git push origin xxx:xxx                                //將本地撤銷修改後的xxx分支推送到origin

          7)git branch -d xxx_backup                          //刪除本地備份分支

                git push origin :xxx_backup                      //刪除遠程備份分支

          上述步驟5執行時可能會出現錯誤,以下:

          

         尤爲是遠程倉庫是在github或oschina上時,由於這些網站中將某分支設置成了當前分支,而刪除當前分支是不容許的,因此要在這些網站的設置中切換當前分支爲其它分支,而後再此執行步驟5.

4,方法3中,若是是本身創建的倉庫,默認分支是master,我沒找到修改默認分支的辦法,master分支也就沒法刪除,方法4也就沒用了。但有另外一種方法能夠解決問題

      1)登陸服務器,備份中央倉庫

            mv demo.git demo_backup.git

      2)新建一個空的demo.git       

            git init --bare demo.git

      3)經過回滾,修復本地提交到正常狀態

            git reset --hard 提交id

      4)推送本地的master分支到服務器的demo.git

            git push remote master:master

      這樣的作法,能夠保存以前的提交記錄,是比較好的修復方式;這種方法比較適合修復出現代碼覆蓋的狀況

若是中間出現問題,請經過demo_backup.git找回中央倉庫

 

錯誤的作法

1,直接reset本地提交,而後push到origin

          這種作法是錯誤的,git會報錯,緣由是遠程倉庫中該分支比本地分支多n次commit,只能先pull,再push。而若是先pull的話,那本地又變成和遠程同樣了,是解決不了問題的。

相關文章
相關標籤/搜索