一般在不少傳統集中式版本控制系統中,只有兩個空間用來管理你的數據,一個是你的working copy(工做區),另外一個即是 datastore(版本庫),然而在Git中,引入了staging area(index)這一律念,咱們能夠把它看作一個「碼頭」,你來決定其中的哪些改變能夠被「運走」。
html
有了暫存區,咱們的工做區邊和Git庫就再也不直接掛鉤了,這樣咱們能夠更加靈活的控制咱們的數據了,對暫存區的操做很是的簡單,git add能夠將你工做區的文件添加到暫存區中,git commit 能夠將暫存區中的文件提交到版本庫中。git
舉個例子吧:shell
$ git status On branch master Changed but not updated: (use "git add <file>..." to update what will be committed) modified: README.md modified: about.html Untracked files: (use "git add <file>..." to include in what will be committed) help.txt no changes added to commit (use "git add" and/or "git commit -a")
咱們修改了README.md 和about.html兩個文件,而且添加了help.txt文件,當執行git status命令時,git告訴咱們能夠執行git add命令將修改添加到暫存區中。版本控制
$ git add . $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.md modified: about.html new file: help.txt
當咱們執行git add . 後,再執行git status, git又提示咱們能夠執行git reset HEAD <file>放棄添加,或者git commit 將暫存區的數據提交到版本庫中。code
$ git commit -m "Adding stuff" Created commit e793200: Adding stuff 2 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 help.txt
這樣咱們就將暫存區中的數據提交到了版本庫中,Git告訴咱們有兩個文件被修改了,插入了三行數據,添加了一個文件。htm
以上即是最基本的Git操做了,那到底什麼是暫存區呢?咱們來看個圖片可能更直觀對象
咱們看到圖片大體分紅了三個區域:工做區,index,master。目前咱們即可以把它們分別理解爲工做區,暫存區,和版本庫了。
圖片
能夠看到add 操做將工做區數據添加到了暫存區,commit操做則提交到了版本庫中,而reset HEAD是用版本庫中最新提交的目錄樹來重置暫存區的目錄樹。it
另外在咱們執行git diff操做時後面添加不一樣的參數,會獲得不一樣的結果,這是由於比較的兩個對象可能不相同,如:io
git diff 不加參數,比較的是工做區和暫存區的數據。
git diff --cached 比較的是暫存區和版本庫中的數據
這裏只是大體的說明了下暫存區的一點點理解,至於暫存區給咱們帶來的好處和強大還有不少,讓咱們慢慢解開Git的面紗。
注:圖片來自 機械工業出版社 蔣鑫著《Git權威指南》一書。