工作區(qū)和暫存區(qū)
- 工作區(qū)(Working Directory):在電腦里能看到的目錄,用于存放代碼的文件夾
- 版本庫(kù)(Repository):工作區(qū)有一個(gè)隱藏目錄.git羊始,這個(gè)不算工作區(qū)筏养,而是Git的版本庫(kù)闪金。
Git的版本庫(kù)里存了很多東西冤议,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master技羔,以及指向master的一個(gè)指針叫
HEAD
喷好。
把文件往Git版本庫(kù)里添加的時(shí)候,是分兩步執(zhí)行的:
- 用
git add
把文件添加進(jìn)去缅刽,實(shí)際上就是把文件修改添加到暫存區(qū)啊掏; - 第二步是用
git commit
提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支衰猛。
創(chuàng)建Git版本庫(kù)時(shí)迟蜜,Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master
分支,所以啡省,現(xiàn)在娜睛,git commit
就是往master
分支上提交更改。
可以簡(jiǎn)單理解為卦睹,需要提交的文件修改通通放到暫存區(qū)畦戒,然后,一次性提交暫存區(qū)的所有修改结序。每次修改障斋,如果不用
git add
到暫存區(qū),那就不會(huì)加入到commit
中.
撤銷修改
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是徐鹤,把readme.txt文件在工作區(qū)的修改全部撤銷垃环,這里有兩種情況:
- 一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在返敬,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài)遂庄;
- 一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改救赐,現(xiàn)在涧团,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之经磅,就是讓這個(gè)文件回到最近一次git commit
或git add
時(shí)的狀態(tài)泌绣。
命令git reset HEAD <file>
可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū):
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
git reset
命令既可以回退版本预厌,也可以把暫存區(qū)的修改回退到工作區(qū)阿迈。當(dāng)我們用HEAD
時(shí),表示最新的版本轧叽。
小結(jié)
- 場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容苗沧,想直接丟棄工作區(qū)的修改時(shí)刊棕,用命令
git checkout -- file
。 - 場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容待逞,還添加到了暫存區(qū)時(shí)甥角,想丟棄修改,分兩步识樱,第一步用命令
git reset HEAD <file>
嗤无,就回到了場(chǎng)景1,第二步按場(chǎng)景1操作怜庸。 - 場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí)当犯,想要撤銷本次提交,參考day01中的版本回退一節(jié)割疾,不過前提是沒有推送到遠(yuǎn)程庫(kù)嚎卫。
刪除文件
從版本庫(kù)中刪除該文件,那就用命令git rm
刪掉宏榕,并且git commit
:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
現(xiàn)在拓诸,文件就從版本庫(kù)中被刪除了。
如果后面發(fā)現(xiàn)刪錯(cuò)了担扑,因?yàn)榘姹編?kù)里還有呢恰响,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:
$ git checkout -- test.txt
git checkout
其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本,無(wú)論工作區(qū)是修改還是刪除涌献,都可以“一鍵還原”。
小結(jié)
命令git rm
用于刪除一個(gè)文件首有。如果一個(gè)文件已經(jīng)被提交到版本庫(kù)燕垃,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心井联,你只能恢復(fù)文件到最新版本卜壕,你會(huì)丟失最近一次提交后你修改的內(nèi)容.