2.4 撤銷操作
場景一:在工作區(qū)亂七八糟改一通想要還原捂刺,并沒有添加到暫存區(qū)。
在寫代碼的時(shí)候爽彤,如果沒有提前將整個(gè)邏輯理清楚就開始修改之前的代碼擒权,那么大多數(shù)情況是到最后自己都不知道寫的啥,這時(shí)候就會(huì)想要回到自己修改之前的那個(gè)版本祥国。
前提是一直在工作區(qū)進(jìn)行修改昵观,并沒有添加到暫存區(qū)。
解決思路:
在修改之前在分支倉庫中進(jìn)行一次備份
使用 git status 查詢狀態(tài)舌稀,如果本地工作區(qū)與分支倉庫不同步(本地工作區(qū)有文件修改了咩有提交),參照 2.2 節(jié)先同步啊犬;
修改之后,不滿意壁查,只需將之前在分支倉庫中的(該文件/整個(gè)目錄)備份取出來替換工作區(qū)內(nèi)容即可觉至。
具體操作:
$ git checkout--
說明:由于這里沒有添加到暫存區(qū),所以該指令表示將分支倉庫中的(該文件/整個(gè)目錄)備份取出來替換工作區(qū)的內(nèi)容潮罪。
場景二:將工作區(qū)修改過內(nèi)容添加到暫存區(qū)后又對工作區(qū)文件進(jìn)行修改想要還原
場景二的標(biāo)題有點(diǎn)長康谆,拆分一下做了以下幾件事情:
對工作區(qū)內(nèi)容 readme.txt 進(jìn)行修改 —— 狀態(tài)1领斥;
將修改后的文件 readme.txt 添加到暫存區(qū),此時(shí)沒有提交到分支倉庫 —— 狀態(tài)2嫉到;
再次對工作區(qū)內(nèi)容 readme.txt 進(jìn)行修改 —— 狀態(tài)3。
現(xiàn)在想要將狀態(tài)3撤回到原始狀態(tài)月洛,我們分析下如何做:
狀態(tài)3 撤回到狀態(tài)2
狀態(tài)2 對 readme.txt 進(jìn)行修改并添加到暫存區(qū)
狀態(tài)3 對 readme.txt 進(jìn)行修改并添加到暫存區(qū)何恶,再次修改 readme.txt
// $ git checkout-- $ git checkout-- readme.txt
狀態(tài)2 撤回到狀態(tài)1
狀態(tài)1 對 readme.txt 進(jìn)行修改
狀態(tài)2 對 readme.txt 進(jìn)行修改并添加到暫存區(qū)
// $ gitresetHEAD$ gitresetHEADreadme.txt
狀態(tài)1 撤回到 原始狀態(tài)
原始狀態(tài) readme.txt 與分支倉庫的備份一毛一樣
狀態(tài)1 對 readme.txt 進(jìn)行修改
其實(shí)到這里已經(jīng)回到了場景1遇到的情況:只在工作區(qū)進(jìn)行修改,并沒有添加到暫存區(qū)嚼黔,如何還原细层?
// $ git checkout-- $ git checkout-- readme.txt
作者這里已經(jīng)盡可能的把情況說的簡單點(diǎn),無奈言語顯得有點(diǎn)脆弱唬涧,還需要自己實(shí)踐敲一篇試驗(yàn)一下疫赎,記住,每次撤回到上一個(gè)狀態(tài)時(shí)使用 git status 查看下當(dāng)前狀態(tài)碎节。
場景三:在工作區(qū)修改了文件捧搞,不僅添加到了暫存區(qū),還提交到了分支倉庫中,想要還原怎么辦
這種情形反而更簡單胎撇,提交到分支庫介粘,將相當(dāng)于對當(dāng)前狀態(tài)做了一個(gè)備份放到分支倉庫中取代了最新的備份,我們只需要將分支倉庫中上一個(gè)備份取出來替代工作區(qū)內(nèi)容即可晚树。
詳細(xì)內(nèi)容在 2.4 節(jié)已經(jīng)講解過姻采,這里簡要略過。
查看分支倉庫版本備份信息
$ git log--pretty=oneline
使用 git reset 指令回到上一個(gè)版本
$ gitreset--hard 7e46747
結(jié)論
又到了總結(jié)時(shí)間爵憎,本節(jié)以實(shí)際場景觸發(fā)慨亲,考慮到所有需要撤回的場景,需要多加練習(xí)宝鼓。
場景1:修改了工作區(qū)內(nèi)容沒有添加到暫存區(qū)撤回操作巡雨;
場景2:修改了工作區(qū)添加到暫存區(qū)又修改了該文件撤回操作(詳細(xì)介紹三步自操作);
場景3:修改了工作區(qū)內(nèi)容添加到暫存區(qū)又提交到分支倉庫后撤回操作席函。