git 遠程代碼回滾master

       人總是會有犯錯的時候,所以我們的代碼有時候就需要回滾。


       當我們要回滾的代碼還沒有提交到遠程的時候,可以進行本地回滾,較爲簡單。


一、  本地回滾     

   

       git reset


       回退內容到上一個版本。就像現在的自己爲成年人,想要回退到童年,直接用gitreset命令,直接回退到小時候。

       $ git reset --hard   22f8aae 。22f8aae 爲某次提交的提交號。

       可以用git命令進行回退,也可以在intellij中可視化界面回退,如下。


       比如我們要回退到第二次提交,可以在提交log界面中,選中第二次提交,右鍵選擇reset current branch to here,如下圖所示。


       reset有幾種模式,包括Hard 、Mixed、Soft、Keep,區別如下英文說明。





       git reset --hard HEAD~3 (回退3次提交)


       --hard:本地的源碼和本地未提交的源碼都會回退到某個版本,包括commit內容,和git自己對代碼的索引都會回退到某個版本,就如上圖所說,any local changes will be lost。


       --soft:保留源碼,只能回退到commit信息到某個版本,不涉及到index的回退,如果還需要提交,直接commit即可。比如我選擇soft方式來進行回退,我的本地代碼和本地新添加的尚未commit的代碼都沒有改變。





       --mixed:會保留源碼,只是將git commit和index信息回退到某個版本。



git revert

       如果錯誤的修改已經不是最新的commit,回退某次提交的上一步,用git revert。並且會生成一個新的提交來撤銷某次提交,此次提交之前的commit都會被保留。

       就像是現在的自己是青年人,用git revert是無法退回到小時候,但可以修改小時候某次做過的事情,比如小時候和別人打架,可以直接清除這次打架記憶,但會生成一個最新的記錄,會記錄下曾經清楚過小時候這段記憶(我的理解是這樣的,勿噴)。

       git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61  回退該次提交(提交後的生成的唯一編號c011eb3c20ba6fb38cc94fe5a8dda366a3990c61 )


       以上的兩種方式均爲本地回滾,均不可以達到遠程回滾的效果。要想把遠程分支上的代碼進行回滾,還需要如下操作。


       當我們的代碼已經提交到遠程,不但要回滾本地的代碼,同時也要回滾遠程的代碼,如下操作。


二、 遠程回滾

       方法一,先git reset回滾到本地,然後再強制push到遠程。


       1,回滾到本地上述已經說明不再贅述。

       2,強推到遠程分支(謹慎操作,膽小勿做,備份預備)


        git push -u origin master -f        origin:遠程倉庫名  master:分支名稱  -f:force,意爲強制、強行

       我們是要把本地的修改強制推送到遠程分支上,在強推mster的可能會報錯,意思是沒有權限之類的錯誤,報錯如下。

       remote: GitLab: You don't have permission
       To [email protected]:code-ddreader/media-hapi.git
        ! [remote rejected] master (pre-receive hook declined)


       是因爲master分支一般會成爲保護分支,所以我們首先要去除master爲保護分支,纔可以強推。

       爲分支開啓保護

              *管理員可以開啓
              * 開啓,無法強制推送
              * 開啓,無法被刪除
              * 只有測試全部通過才被接受合併

       該分支添加了保護權限,需要設置去掉保護權限(http://10.255.223.*/code-dd/media-project/protected_branches)。




       這樣操作後就可以把本地強制推送要遠程。


       方法二,先reset回滾到本地,然後再提交到一個新的分支,刪除錯誤的分支(git brach -d master),再把新的分支重命名刪除掉的分支。


       (ps這需要團隊的其他人把本地的刪除掉,然後重新下載一份,任何一個人未重新下載就可以出問題。)

       默認分支設置,也可能要刪除的分支爲 默認分支,造成刪除默認分支失敗。

       默認分支是無法刪除的,遇到master遠程倉庫要回滾就會出問題,我們master是默認的主幹,所以不允許刪除,要刪除的話還要設置一個新的分支爲主分支。

       git config --global push.default "current"

       所以第二種方法也不是十分的好。


       方法三,對於少量的回滾,手動回滾

       對於少量的回滾,可以手動回滾,實在修改的文件太多,無法具細,再採用前兩種方式。



       參考:http://stackoverflow.com/questions/32246503/how-to-fix-you-are-not-allowed-to-push-code-to-protected-branches-on-this-proje





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