【Git笔记3】关于撤销、删除、恢复的那些事儿
? ? ?在躋身于“國慶搶票大戰”的我們,不要忘記學習,今天接著上篇?【Git筆記2】必知習慣和如何版本回退,繼續開干!一起來瞅瞅如何撤銷沒有add的修改,如何撤銷以及add到暫存區的修改,如何刪除文件,如何恢復版本庫中刪除的文件,以及如何恢復工作區的文件。
? ? ?這一連環“如何”,且讓我慢慢道來,不過在此之前,我還是想說說Git為什么比其他版本控制系統設計的優秀,咱不能只口頭說,不拿出真家伙。
說說為什么Git比其他版本控制系統設計的優秀?
答:Git跟蹤并管理的是修改,而非文件。
何為修改?比如新增了一行、刪除了一行、更改了某些字符、刪了一些又加了一些都是修改,甚至創建一個新文件也算一個修改。實驗:
我們在readme.txt增加一行,cat看一下,add 到緩存區,而后又修改一下,然后cat看一下。提交一下并看下狀態: 我們發現第二次的修改沒有提交哦。先理一下我們的操作:
第一次修改 ->?git add?-> 第二次修改 ->?git commit
正驗證著:Git管理的是修改,當你用git add命令后,在工作區的第一次修改被放入暫存區,準備提交,但在工作區的第二次修改并沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。
提交后,用git diff HEAD -- readme.txt命令可以查看工作區和版本庫里面最新版本的區別:
從上面的實驗我們可以理解git如何跟蹤修改的,且我們可以得知:對于git的每次修改,每次修改,如果不用git add到暫存區,那就不會加入到commit中。
如何提交第二次修改呢?
方案1:你可以繼續git add再git commit。
方案2:可別著急提交第一次修改,先git add第二次修改,再git commit。
我們操作一下方案1:
留下一個問題:如何丟棄第二次工作區的修改呢?
如何撤銷沒有add的修改?
?場景:當你亂改了工作區的某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。?實驗:首先在readme.txt增加My stupid boss still prefers SVN.使用git status后發現,嗯,修改了工作區。你會發現Git提示你,git restore-- file可以丟棄工作區的修改,但是其實查了資料,用的最多的還是git checkout --?file。
命令git checkout -- readme.txt意思是把readme.txt文件在工作區的修改全部撤銷。 這里有兩種情況:一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;?
一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。
如何撤銷已經add到暫存區的修改?
場景:
當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步:step1:用命令git resetHEAD <file>step2:用命令git checkout --file 實驗:在readme.txt 中添加了一行,cat 看一下,然后git add 到暫存區。
gitcheckout -- file
gitcheckout -- file
使用git reset hard ,用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區:現在已經放回工作區了,可以用git checkout? --?readme.txt 進行撤銷工作區的修改。
git reflog看下所有記錄。如何刪除文件?
??
在Git中,刪除也是一個修改操作,我們實戰一下,先添加一個新文件test.txt到Git并且提交,一般情況下,你通常直接在文件管理器中把沒用的文件刪了,或者用rm命令刪了,這個時候,Git知道你刪除了文件。
因此,工作區和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了。
確定要從版本庫刪除該文件,那就用命令gitrm 刪除,且commit,注意一下:先手動刪除文件,然后使用git rm <file>和git add<file>效果是一樣的。如何恢復版本庫中刪除的文件?
??
在版本庫中把文件刪除后的你呀,后悔了,怎么把刪除的test.txt找回來呢?那么你可以直接用:
git reset --hard HEAD^?? //回退上個版本??
不是git reset -- hard HEAD^哈
注意:但是可能會影響你其他修改但是未提交的其他內容的。如何恢復工作區的文件?
??
因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版:git checkout?-- <file>
git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
注意:從來沒有被添加到版本庫就被刪除的文件,是無法恢復的!如果報錯:error: pathspec 'test.txt' did not matchany file(s) known to Git,需要做的是兩步走:
step1:git reset HEAD <file>step2:git checkout -- <file> ??//就是在工作區恢復暫存區版本
? ? ??一連環“如何”,你覺得如何?接下來一篇我們會介紹下常見的遠程倉庫操作:添加遠程庫、從遠程庫克隆,以及分支管理的部分知識。
期待與你再見!來和小伙伴們一起向上生長呀!掃描下方二維碼,添加小詹微信,可領取千元大禮包并申請加入 Python 學習交流群,群內僅供學術交流,日常互動,如果是想發推文、廣告、砍價小程序的敬請繞道!一定記得備注「交流學習」,我會盡快通過好友申請哦!👆長按識別,添加微信(添加人數較多,請耐心等待)👆長按識別,關注小詹(掃碼回復 1024 領取程序員大禮包)推薦閱讀:(點擊標題即可跳轉)
總結
以上是生活随笔為你收集整理的【Git笔记3】关于撤销、删除、恢复的那些事儿的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 假如有人把支付宝存储服务器炸了(附文末福
- 下一篇: 【Git笔记2】必知习惯和如何版本回退