git回退版本

前話:在vscode中,安裝git History插件,安裝之后就可以用F1,選擇Git:View History(git log),即可看到git的提交記錄。
在每一行的最后面,就是commit_id

git reset

如果回退一個只是commit的,并沒有push到遠端分支的提交:
則直接執(zhí)行

git reset --hard commit_id
//回退到commit_id的這次提交
//或者
git reset --hard HEAD^
//回退到上一次提交
//HEAD 等同于當前分支的最新的一次commit提交id
//HEAD^ 是上一次提交

注:
如果執(zhí)行g(shù)it reset --hard HEAD^ 顯示More?
這是因為在windows的cmd控制臺中換行默認符是^,所以More?的意思是問你下一行是否需要再輸入,^符號就被當做換行符了。
解決方法:

//加引號
git reset --hard "HEAD^"
//加^
git reset --hard HEAD^^
//換成~
git reset --hard HEAD~
git reset --hard HEAD~1
//~后面的數(shù)字表示回退幾次提交,默認是一次

另外:
git reset 還有以下用法:
git reset --soft
git reset --mixed
區(qū)別就是:
使用--soft就僅僅將頭指針恢復(fù),已經(jīng)add的緩存以及工作空間的所有東西都不變。也就是執(zhí)行了git reset --soft 就相當于只回退了git commit -m 這一步,改動的文件已經(jīng)在暫存區(qū)了。
使用--mixed,就將頭指針恢復(fù),已經(jīng)add的緩存也會丟失掉,工作空間的代碼什么的是不變的。也就是執(zhí)行了git reset --mixed 就相當于回退到了git add之前,改動的文件還在工作區(qū),沒有add到暫存區(qū)。
使用--hard,一切就全都恢復(fù)了,頭指針恢復(fù),add的緩存消失,工作空間的代碼什么的也恢復(fù)到以前狀態(tài)。也就是相當于你啥都沒干過,工作區(qū)也沒有了

另外,如果已經(jīng)push到遠端了,怎么回退?
依舊是先在本地回退,然后推到遠端。
但是如果直接push的話,會push失敗,因為本地的版本落后于遠端的版本。
那就只有強退,加個--force參數(shù)

git push origin <branch> --force

git revert

回退版本還可以用git revert

如果回退的是一個只commit還沒有push到遠端的操作:
git revert commit_id 操作不會刪除commit_id這次提交記錄,并且還會新增一個新的revert的提交記錄。

舉個例子:
如果你依次有commit_id為a、b、c三次提交記錄,并且a和b都已經(jīng)提交到遠端,c還沒有push到遠端,現(xiàn)在想撤銷c的改動,
則執(zhí)行git revert c,然后會生成一條d的commit_id,記錄你revert了c。
然后你執(zhí)行g(shù)it status,會告訴你你有2次commit沒有push。
然后你執(zhí)行push到遠端,就會記錄下來你的c、d兩次提交。

如果你revert的是已經(jīng)push到遠端的提交,會在工作區(qū)報沖突,需要你手動撤銷你revert分支之后的改動,然后再次add,commit,push就可以了。

舉個例子:
如果你依次有commit_id為a、b、c三次提交記錄,并且都已經(jīng)提交到遠端,現(xiàn)在想撤銷b之后的改動,
則執(zhí)行git revert b,然后工作區(qū)會報沖突,報的是a之后的改動和當前的改動有沖突,可以選擇采用傳入的更改,然后接著add,commit,push就可以了。

注意:
git reset 后面跟的commit_id 是回滾這次提交的操作
git revert 后面跟的commit_id 是回滾這次提交
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容