git之遠程代碼回滾master問題
人總是會有犯錯的時候,所以我們的代碼有時候就需要回滾。
當(dāng)我們要回滾的代碼還沒有提交到遠程的時候,可以進行本地回滾,較為簡單。
一、 本地回滾
git reset
回退內(nèi)容到上一個版本。就像現(xiàn)在的自己為成年人,想要回退到童年,直接用gitreset命令,直接回退到小時候。
$ git reset --hard 22f8aae 。
22f8aae 為某次提交的提交號。
可以用git命令進行回退,也可以在intellij中可視化界面回退,如下。
比如我們要回退到第二次提交,可以在提交log界面中,選中第二次提交,右鍵選擇reset current branch to here,如下圖所示。
reset有幾種模式,包括Hard 、Mixed、Soft、Keep,區(qū)別如下英文說明。
git reset --hard HEAD~3 (回退3次提交)
- --hard:本地的源碼和本地未提交的源碼都會回退到某個版本,包括commit內(nèi)容,和git自己對代碼的索引都會回退到某個版本,就如上圖所說,any local changes will be lost。
- --soft:保留源碼,只能回退到commit信息到某個版本,不涉及到index的回退,如果還需要提交,直接commit即可。比如我選擇soft方式來進行回退,我的本地代碼和本地新添加的尚未commit的代碼都沒有改變。
- --mixed:會保留源碼,只是將git commit和index信息回退到某個版本。
git revert
如果錯誤的修改已經(jīng)不是最新的commit,回退某次提交的上一步,用git revert。并且會生成一個新的提交來撤銷某次提交,此次提交之前的commit都會被保留。
就像是現(xiàn)在的自己是青年人,用git revert是無法退回到小時候,但可以修改小時候某次做過的事情,比如小時候和別人打架,可以直接清除這次打架記憶,但會生成一個最新的記錄,會記錄下曾經(jīng)清楚過小時候這段記憶(我的理解是這樣的,勿噴)。
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61 回退該次提交(提交后的生成的唯一編號c011eb3c20ba6fb38cc94fe5a8dda366a3990c61)
以上的兩種方式均為本地回滾,均不可以達到遠程回滾的效果。要想把遠程分支上的代碼進行回滾,還需要如下操作。
當(dāng)我們的代碼已經(jīng)提交到遠程,不但要回滾本地的代碼,同時也要回滾遠程的代碼,如下操作。
二、 遠程回滾
方法一
先git reset回滾到本地,然后再強制push到遠程。
1,回滾到本地上述已經(jīng)說明不再贅述。
2,強推到遠程分支(謹慎操作,膽小勿做,備份預(yù)備)
git push -u origin master -f origin:遠程倉庫名 master:分支名稱 -f:force,意為強制、強行
我們是要把本地的修改強制推送到遠程分支上,在強推mster的可能會報錯,意思是沒有權(quán)限之類的錯誤,報錯如下。
remote: GitLab: You don't have permission To git@10.255.223.213:code-ddreader/media-hapi.git ! [remote rejected] master (pre-receive hook declined)
是因為master分支一般會成為保護分支,所以我們首先要去除master為保護分支,才可以強推。
為分支開啟保護
- *管理員可以開啟
- * 開啟,無法強制推送
- * 開啟,無法被刪除
- * 只有測試全部通過才被接受合并
該分支添加了保護權(quán)限,需要設(shè)置去掉保護權(quán)限(http://10.255.223.*/code-dd/media-project/protected_branches)。
這樣操作后就可以把本地強制推送要遠程。
方法二
先reset回滾到本地,然后再提交到一個新的分支,刪除錯誤的分支(git brach -d master),再把新的分支重命名刪除掉的分支。
(ps這需要團隊的其他人把本地的刪除掉,然后重新下載一份,任何一個人未重新下載就可以出問題。)
默認分支設(shè)置,也可能要刪除的分支為 默認分支,造成刪除默認分支失敗。
默認分支是無法刪除的,遇到master遠程倉庫要回滾就會出問題,我們master是默認的主干,所以不允許刪除,要刪除的話還要設(shè)置一個新的分支為主分支。
git config --global push.default "current"
所以第二種方法也不是十分的好。
方法三
對于少量的回滾,手動回滾
對于少量的回滾,可以手動回滾,實在修改的文件太多,無法具細,再采用前兩種方式。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
xmlHttp ie6下不跨域還提示沒有權(quán)限,ie8下不會有這錯誤
昨天晚上叫我好弄啊,最后發(fā)現(xiàn)原因是我url太長了,最后發(fā)現(xiàn)URL在2070B左右就不行了2009-04-04