不小心將測(cè)試代碼提交到生產(chǎn)環(huán)境? 6 種方法秒解決!

一、撤銷提交 二、丟棄提交 三、替換上一次提交 四、撤銷工作區(qū)的文件修改 五、從暫存區(qū)撤銷文件 六、撤銷當(dāng)前分支的變化

Git 版本管理時(shí),往往需要撤銷某些操作。
本文介紹幾種最主要的情況,給出詳細(xì)的解釋。
一、撤銷提交
一種常見(jiàn)的場(chǎng)景是,提交代碼以后,你突然意識(shí)到這個(gè)提交有問(wèn)題,應(yīng)該撤銷掉,這時(shí)執(zhí)行下面的命令就可以了。
$?git?revert?HEAD
上面命令的原理是,在當(dāng)前提交后面,新增一次提交,抵消掉上一次提交導(dǎo)致的所有變化。它不會(huì)改變過(guò)去的歷史,所以是首選方式,沒(méi)有任何丟失代碼的風(fēng)險(xiǎn)。
git revert 命令只能抵消上一個(gè)提交,如果想抵消多個(gè)提交,必須在命令行依次指定這些提交。比如,抵消前兩個(gè)提交,要像下面這樣寫(xiě)。
$?git?revert?[倒數(shù)第一個(gè)提交]?[倒數(shù)第二個(gè)提交]
git revert 命令還有兩個(gè)參數(shù)。
--no-edit:執(zhí)行時(shí)不打開(kāi)默認(rèn)編輯器,直接使用 Git 自動(dòng)生成的提交信息。--no-commit:只抵消暫存區(qū)和工作區(qū)的文件變化,不產(chǎn)生新的提交。
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能。
項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
二、丟棄提交
如果希望以前的提交在歷史中徹底消失,而不是被抵消掉,可以使用 git reset 命令,丟棄掉某個(gè)提交之后的所有提交。
$?git?reset?[last?good?SHA]
git reset 的原理是,讓最新提交的指針回到以前某個(gè)時(shí)點(diǎn),該時(shí)點(diǎn)之后的提交都從歷史中消失。
默認(rèn)情況下,git reset 不改變工作區(qū)的文件(但會(huì)改變暫存區(qū)),--hard 參數(shù)可以讓工作區(qū)里面的文件也回到以前的狀態(tài)。
$?git?reset?--hard?[last?good?SHA]
執(zhí)行 git reset 命令之后,如果想找回那些丟棄掉的提交,可以使用 git reflog 命令,具體做法參考這里。不過(guò),這種做法有時(shí)效性,時(shí)間長(zhǎng)了可能找不回來(lái)。
基于微服務(wù)的思想,構(gòu)建在 B2C 電商場(chǎng)景下的項(xiàng)目實(shí)戰(zhàn)。核心技術(shù)棧,是 Spring Boot + Dubbo 。未來(lái),會(huì)重構(gòu)成 Spring Cloud Alibaba 。
項(xiàng)目地址:https://github.com/YunaiV/onemall
三、替換上一次提交
提交以后,發(fā)現(xiàn)提交信息寫(xiě)錯(cuò)了,這時(shí)可以使用 git commit 命令的 --amend 參數(shù),可以修改上一次的提交信息。
$?git?commit?--amend?-m?"Fixes?bug?#42"
它的原理是產(chǎn)生一個(gè)新的提交對(duì)象,替換掉上一次提交產(chǎn)生的提交對(duì)象。
這時(shí)如果暫存區(qū)有發(fā)生變化的文件,會(huì)一起提交到倉(cāng)庫(kù)。所以,--amend 不僅可以修改提交信息,還可以整個(gè)把上一次提交替換掉。
四、撤銷工作區(qū)的文件修改
如果工作區(qū)的某個(gè)文件被改亂了,但還沒(méi)有提交,可以用 git checkout 命令找回本次修改之前的文件。
$?git?checkout?--?[filename]
它的原理是先找暫存區(qū),如果該文件有暫存的版本,則恢復(fù)該版本,否則恢復(fù)上一次提交的版本。
注意,工作區(qū)的文件變化一旦被撤銷,就無(wú)法找回了。
五、從暫存區(qū)撤銷文件
如果不小心把一個(gè)文件添加到暫存區(qū),可以用下面的命令撤銷。
$?git?rm?--cached?[filename]
上面的命令不影響已經(jīng)提交的內(nèi)容。
六、撤銷當(dāng)前分支的變化
你在當(dāng)前分支上做了幾次提交,突然發(fā)現(xiàn)放錯(cuò)了分支,這幾個(gè)提交本應(yīng)該放到另一個(gè)分支。
#?新建一個(gè)?feature?分支,指向當(dāng)前最新的提交
#?注意,這時(shí)依然停留在當(dāng)前分支
$?git?branch?feature
#?切換到這幾次提交之前的狀態(tài)
$?git?reset?--hard?[當(dāng)前分支此前的最后一次提交]
#?切換到?feature?分支
$?git?checkout?feature
上面的操作等于是撤銷當(dāng)前分支的變化,將這些變化放到一個(gè)新建的分支。
推薦閱讀:
不是你需要中臺(tái),而是一名合格的架構(gòu)師(附各大廠中臺(tái)建設(shè)PPT)
企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案
論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?
企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!
【中臺(tái)實(shí)踐】華為大數(shù)據(jù)中臺(tái)架構(gòu)分享.pdf
華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)
超詳細(xì)280頁(yè)Docker實(shí)戰(zhàn)文檔!開(kāi)放下載
