IDEA git版本回滾使用解讀
1.git分區(qū)
git的版本回滾其實(shí)就是回滾不同的分區(qū),所以在聊git回滾之前我們有必要簡(jiǎn)單了解一下git的分區(qū)。
git在本地有三大分區(qū):工作區(qū)、暫存區(qū)、版本庫(kù)。
- 工作區(qū):正在編寫,還未add的部分,紅色。
- 暫存區(qū):add后的代碼,綠色。
- 版本庫(kù):commit后的代碼,灰色。

在IDEA中,在loacl changes中可以看到在工作區(qū)中和暫存區(qū)中的內(nèi)容:

版本庫(kù)中的內(nèi)容可以從log中看出來(lái),log中可以看到commit test這條提交的分支是本地的main分支,如果是已經(jīng)同步到遠(yuǎn)端的提交分支會(huì)顯示為origin/main:

2.未commit,進(jìn)行回滾
已經(jīng)add到暫存區(qū),但是未commit到本地版本庫(kù)的改動(dòng)有兩種:
- 新增的文件
- 修改的文件
新增的文件直接刪除即可,如果是修改的文件,使用roll back來(lái)回滾。在local change里面,選擇想要rollback的文件即可:

也可以直接右擊要rollback的文件然后rollback也行。
3.commit未push,進(jìn)行回滾
3.1.undo commit
commit到本地版本庫(kù)并且還未push的代碼,可以在log里右擊單次提交進(jìn)行undo commit:

需要注意的是undo commit只能從最后一次commit開(kāi)始回滾,undo commit后會(huì)要求選擇一個(gè)變更列表來(lái)存放回滾后的內(nèi)容,可以自己新建一個(gè),比如此處的commit test,也可以在下拉框里選擇一個(gè)已經(jīng)存在的,如果是自己新建的變更列表,勾選了set active選項(xiàng),后續(xù)的變動(dòng)也會(huì)存放到該變更列表中:

可以看到多了一個(gè)變更列表:

變更列表有什么用喃?其實(shí)變更列表可以把它視為一個(gè)命名空間,就是用來(lái)做資源隔離的,在進(jìn)行commit的時(shí)候需要下拉選擇不同的變更列表來(lái)進(jìn)行提交:

3.2.reset
有時(shí)候我們需要直接將本地的代碼回滾到版本庫(kù)的某一個(gè)版本,這時(shí)候可以使用reset來(lái)進(jìn)行回滾。reset有幾種模式:
soft,將版本回滾,工作區(qū)不動(dòng),暫存區(qū)=原來(lái)的+回滾后和回滾前的版本差異。mixed,將版本回滾,回滾到了所有 git add 和 git commit 的命令執(zhí)行之前。暫存區(qū)變?yōu)榭?,變更全部到了工作區(qū)。hard,將版本回滾,將所有工作區(qū)和暫存區(qū)的文件修改全部清空,是真正的覆蓋,不能找回了。keep,將版本回滾,將所有commit的內(nèi)容丟棄掉,未commit的內(nèi)容保留。
在log上選擇要回滾到的具體版本:

reset時(shí)會(huì)要求選擇回滾的模式:

4.已commit&push,進(jìn)行回滾
對(duì)commit&push的內(nèi)容進(jìn)行回滾其實(shí)就是對(duì)遠(yuǎn)端倉(cāng)庫(kù)的代碼版本進(jìn)行回滾,在實(shí)際開(kāi)發(fā)中偶爾會(huì)將內(nèi)容誤推送到了遠(yuǎn)端倉(cāng)庫(kù)上去。
比如commit的message寫錯(cuò)了,查看log的時(shí)候才發(fā)現(xiàn),比如不小心將本地還沒(méi)有開(kāi)發(fā)完成的代碼推送到遠(yuǎn)端倉(cāng)庫(kù)了,由或者合并沖突或者分支的時(shí)候合并錯(cuò)了......等等這些情況都要我們對(duì)遠(yuǎn)端倉(cāng)庫(kù)的代碼進(jìn)行回滾。
回滾的方式其實(shí)很簡(jiǎn)單,就是將本地的代碼版本回滾到指定版本(至于是用revert還是reset,看自己),然后將本地的版本用git push -f強(qiáng)推到遠(yuǎn)端。
在IDEA中可以在terminal中執(zhí)行指令:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot 2.X優(yōu)雅的解決跨域問(wèn)題
這篇文章主要給大家介紹了關(guān)于Spring Boot 2.X如何優(yōu)雅的解決跨域問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot 2.X具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Springcould多模塊搭建Eureka服務(wù)器端口過(guò)程詳解
這篇文章主要介紹了Springcould多模塊搭建Eureka服務(wù)器端口過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
JavaMail實(shí)現(xiàn)郵件發(fā)送的方法
這篇文章主要介紹了JavaMail實(shí)現(xiàn)郵件發(fā)送的方法,實(shí)例分析了java實(shí)現(xiàn)郵件發(fā)送的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
妙解Java中的回調(diào)機(jī)制(CallBack)
本文以最簡(jiǎn)明扼要的例子將Java的回調(diào)機(jī)制介紹給大家,感興趣的朋友可以參考一下。2016-07-07
詳解Spring Aop實(shí)例之AspectJ注解配置
本篇文章主要介紹了詳解Spring Aop實(shí)例之AspectJ注解配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Java用自定義的類作為HashMap的key值實(shí)例
下面小編就為大家?guī)?lái)一篇Java用自定義的類作為HashMap的key值實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
利用微信小程序+JAVA實(shí)現(xiàn)微信支付的全過(guò)程
微信支付是一種在線支付解決方案,允許用戶通過(guò)微信內(nèi)的支付功能進(jìn)行付款,下面這篇文章主要給大家介紹了關(guān)于利用微信小程序+JAVA實(shí)現(xiàn)微信支付的相關(guān)資料,需要的朋友可以參考下2024-08-08
springboot掃描自定義的servlet和filter代碼詳解
本文是一篇根據(jù)作者工作經(jīng)歷總結(jié)出來(lái)的關(guān)于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺(jué)得非常不錯(cuò),這里給大家分享下,和朋友們一起學(xué)習(xí),進(jìn)步。2017-10-10

