Git Bash誤刪除工作區(qū)文件后如何恢復(fù)

對(duì)于刪除操作,git中有兩條命令,rm和git rm,都可以刪除工作區(qū)中的文件,但是刪除的方式還是不一樣,今天我們主要探討兩個(gè)問題:
1 、這兩條命令有什么區(qū)別?
2、使用這兩條命令刪除文件后發(fā)現(xiàn)誤刪除了,該如何進(jìn)行恢復(fù)呢?
為了更好的理解這兩個(gè)問題,我們先回顧一下有關(guān)工作區(qū)、暫存區(qū)的概念。

工作區(qū)(Working Directory)
就是你在電腦里能看到的目錄,比如我的testgit文件夾就是一個(gè)工作區(qū)。

working directory.png

版本庫(Repository)
工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫。
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD。

0.jpg

我們把文件往Git版本庫里添加的時(shí)候,是分兩步執(zhí)行的:
第一步:用git add把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū);
第二步:用git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
一句話理解就是把需要提交的文件修改統(tǒng)統(tǒng)放到暫存區(qū),然后一次性提交暫存區(qū)的所有修改。
回到最初的兩個(gè)問題:rm 和 git rm 命令的區(qū)別以及誤刪之后如何恢復(fù)?
在進(jìn)行刪除實(shí)驗(yàn)之前,我們先創(chuàng)建一個(gè)test.txt文件到工作區(qū)gittest文件夾,然后添加到Repository中。
step1:在gittest文件夾下新建文本文件test.txt(前提是gittest已經(jīng)設(shè)置為git可以管理的倉庫)

test.png

step2:git add:把文件添加到暫存區(qū)

git add.png

step3:git commit:把暫存區(qū)的文件修改提交到當(dāng)前分支master

git commit.png

1.使用rm命令刪除test.txt
命令:rm test.txt


git rm.png

然后工作區(qū)的test.txt果然被刪除了。
使用命令:git status 查看操作結(jié)果。
發(fā)現(xiàn) Changes not staged for commit: 這句話的意思是rm test.txt這個(gè)刪除操作刪除了工作區(qū)的test.txt文件,但是并沒有添加到暫存區(qū)。對(duì)于沒有添加到暫存區(qū)的刪除操作,我們?nèi)绾位謴?fù)文件呢?答案就在git status 下的提示信息:use git checkout -- test.txt 撤銷工作區(qū)的刪除操作。
運(yùn)行 git checkout -- test.txt發(fā)現(xiàn)test.txt文件又恢復(fù)了。

checkout.png

2.使用git rm 命令刪除test.txt
運(yùn)行 git rm test.txt
運(yùn)行 git status

git rm2.png

發(fā)現(xiàn)test.txt文件被刪除。
根據(jù)git status 的提示信息:Changes to be commited,這句話的意思是刪除操作已經(jīng)放到暫存區(qū),等待提交到分支。而比較前面rm 刪除操作并沒有提交到暫存區(qū)。那么對(duì)于提交到暫存區(qū)的刪除操作如何恢復(fù)文件呢?
兩步:
step1:命令:git reset head test.txt 可以把暫存區(qū)的修改撤銷掉
git status 查看操作結(jié)果發(fā)現(xiàn) Changes not staged for commit,意思是暫存區(qū)的刪除操作已經(jīng)撤銷。但是這一步文件還沒有恢復(fù)喲。

reet.png

step2: 命令:git checkout -- test.txt 可以工作區(qū)的修改撤銷掉
這時(shí)候文件才真正的恢復(fù)了。

claean.png

總結(jié):
1:rm 和 git rm命令都可以刪除工作區(qū)文件,但是rm不會(huì)將修改提交到暫存區(qū),所以恢復(fù)時(shí)只需要使用命令git checkout -- test.txt撤銷工作區(qū)的刪除即可。
2:git rm 會(huì)把刪除提交到暫存區(qū),所以恢復(fù)文件需要兩步,先使用命令git reset head test.txt 撤銷暫存區(qū)操作,再使用命令git checkout -- test.txt撤銷工作區(qū)的刪除即可。
3:$ git checkout -- file
這個(gè)命令可以讓我們丟棄工作區(qū)的修改,如:
$ git checkout -- test.txt
這個(gè)的意思就是把test.txt文件在工作區(qū)的修改撤銷。
4:假如現(xiàn)在你沒有提交commit,但是已經(jīng)git add加入到了暫存區(qū),當(dāng)你的文件需要撤銷時(shí),這時(shí)Git提供了一個(gè)命令
git reset HEAD file
用命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉。

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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