代碼回滾:簡(jiǎn)述git reset --hard xxx 、git reset --soft xxx與 git revert xxx三者區(qū)別

我們?cè)谑褂胓it進(jìn)行版本管理的時(shí)候,如果遇到需要回退代碼的情況,一般會(huì)用 git reset 命令。
我們大致了解一下git大致的工作流程。


git工作流程

首先,想象一下,我正在寫(xiě)著我的代碼,這個(gè)狀態(tài)對(duì)應(yīng)圖中的 Working diretory,
這個(gè)時(shí)候,我的代碼還就是我的,跟 git 半毛錢關(guān)系都沒(méi)有。(在Android Studio中對(duì)應(yīng)文件顏色是紅色)

然后,我把當(dāng)前編輯的 A 文件 add 到 git 中,這個(gè)時(shí)候就跟 git 發(fā)生了關(guān)系,git 接受了我的代碼,然后把這個(gè)文件存入了自己的暫存區(qū),后面我對(duì)這個(gè)文件的更改 ,git 都會(huì)知曉。這個(gè)狀態(tài)對(duì)應(yīng)圖中的 Stage/Index(在Android Studio中對(duì)應(yīng)文件顏色是綠色或者藍(lán)色)

我把寫(xiě)好的 A 文件 commit 到 git ,這就有了一次提交歷史。對(duì)應(yīng)圖中的 History,在 git 中只要 commit 過(guò)的文件,都有各種方式可以恢復(fù),基本來(lái)說(shuō),就是不會(huì)丟了(在Android Studio中對(duì)應(yīng)文件顏色是白色)

好的,那么現(xiàn)在,我發(fā)現(xiàn)代碼寫(xiě)的不好,需要回退到上一次的提交,我有幾個(gè)命令可以選擇。

常見(jiàn)以下幾種命令:

git reset --hard
git reset --soft

git reset --hard xxx與git reset --soft

git reset --hard

這個(gè)命令 非常危險(xiǎn) ,是 git 中少有的幾個(gè)會(huì)丟失信息的操作。它會(huì)把回退點(diǎn)之前的所有信息都刪掉,一個(gè)不留,干干凈凈。

舉個(gè)例子:
現(xiàn)在我把 A文件修改了兩次,到了C 狀態(tài) ,并且已提交。
那么我的分支指針是指向 C , 當(dāng)前文件編輯的狀態(tài)也是在C

(F)
A-B-C
?????????↑
master

我輸入了git reset --hard,結(jié)果會(huì)變成:

(F)
A-B
????↑
master

對(duì)的, C 狀態(tài)徹底沒(méi)有,再也找不回來(lái)。所以,沒(méi)事不要用這個(gè)命令。

git reset --soft

同樣是這個(gè)狀態(tài):

(F)
A-B-C
???????? ↑
master

我輸入了git reset --soft,結(jié)果是:

(F)
A-B-C
???? ↑
master

文件狀態(tài)與分支的指針都指向上一個(gè)提交,C 還是在的,只是沒(méi)顯示。

git revert HEAD

  >git revert 撤銷某次操縱,此次造作之前和之后的commit和history都會(huì)保留,并且把這次撤銷作為一次最新的提交。
  • git revert --HEAD 撤銷前一次的commit
  • git revert --HEAD^ 撤銷前前一次的commit
  • git revert commit (commit 內(nèi)容為指定撤銷的版本號(hào):如d5b992cc5578c67f988f9684e91a6ce13d80473d),同樣撤銷也會(huì)作為一次提交進(jìn)行保存。)
    注:查看commit版本信息,指令為 git log

我對(duì)項(xiàng)目中的一個(gè)文件進(jìn)行的重命名操作。
原文件名:


原文件名

對(duì)文件重命名

然后將其然后將其提交到本地倉(cāng)庫(kù),這是好我們發(fā)現(xiàn)命名有問(wèn)題,需要返回原名,我們可以通過(guò)再次重命名操作,或者撤銷已經(jīng)提交到本地倉(cāng)庫(kù)的指令。

git revert --HEAD

效果:


回退到原文件名

可以清楚的看到revert指令讓我們的操作回退到commit操作的前一步,也就是未對(duì)文件名進(jìn)行更改的狀態(tài)。


代碼回滾常見(jiàn)命名的使用場(chǎng)景:

命令 作用域 常用情景
git reset 提交層面 在私有分支上舍棄一些沒(méi)有提交的更改
git reset 文件層面 將文件從緩存去中移除
git checkout 提交層面 切換分支或查看舊版本
git checkout 文件層面 舍棄工作目錄中的更改
git revert 提交層面 在公共分支上回滾更改
git revert 文件層面 (沒(méi)有)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • git reset和git revert都可以用于撤銷已存在的commit,其中g(shù)it reset可以細(xì)化到針對(duì)單...
    伊凡的一天閱讀 644評(píng)論 0 1
  • 2017.6.11 昨晚睡眠不錯(cuò),9點(diǎn)到早上7點(diǎn),只有這么睡才能達(dá)到睡眠時(shí)長(zhǎng)標(biāo)準(zhǔn)呀,不過(guò)你睡覺(jué)也太夸張了,幾次快被...
    星空下的悠游閱讀 145評(píng)論 0 1
  • 沉默是什么,擁有力量嗎?沉默不是沉迷,沉默不是默然,可沉默會(huì)是無(wú)奈嗎?到底應(yīng)該怎么做呢?今天呀~無(wú)言呢!
    箐薇閱讀 213評(píng)論 0 0
  • 公司的老板娘有一對(duì)雙胞胎兒子,但是由于當(dāng)時(shí)早產(chǎn),小兒子瑞瑞出生時(shí)缺氧,導(dǎo)致瑞瑞各方面發(fā)育都比不上大兒子,以至于她一...
    快快媽媽育兒說(shuō)閱讀 189評(píng)論 1 0
  • mp.weixin.qq.com/s “···于是,最沉重的負(fù)擔(dān)同時(shí)也成了最強(qiáng)盛的生命力的影像。負(fù)擔(dān)越重,...
    楊純閱讀 617評(píng)論 0 1

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