Git 和其餘版本控制系統如SVN的一個不一樣之處就是有暫存區的概念。這在上文已有說起,本文具體說明什麼是工做區及暫存區,以及如何使用本地git庫的操做命令:重點 git add 及 git commit 。git
回顧上一章節版本庫建立: 先將 D:盤下的 learngit 整個文件夾刪除,而後建立空的 Git 版本庫。學習
工做區(Working Directory)即操做系統中看到的文件夾,如 d:/learngit ,目前工做區是空的。google
工做區有一個隱藏目錄.git
,這個不算工做區,而是Git的版本庫(Repository)。Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。spa
第一步:git add
把文件添加進去,實際上就是把文件修改添加到暫存區操作系統
第二步:git commit
提交更改,實際上就是把暫存區的全部內容提交到當前分支(建立Git版本庫時,Git自動建立了master
分支; 因此,目前 git commit
就是往master
分支上提交更改;分支的概念以後章節會詳細說明)版本控制
可簡單理解爲,須要提交的文件修改統統放到暫存區;而後,一次性提交暫存區的全部修改。下面具體說明 git add 及 git commit 操做 (有興趣的可關注下 git add 和 commit 文件後 .git 目錄的變化)指針
git add <file> 把單一指定文件加入至暫存區(須加後綴格式)
code
例如:在該文件夾中新建一空的 1.txt 文件,將該文件加入暫存區,需 git add 1.txt ; 未 add 前,git status 會提示(紅框)。
blog
若修改了該 1.txt, 因爲工做區和暫存區文件不一樣,仍須 git add 1.txt
文檔
若新增或更改多個指定文件, 可以使用空格分隔多個文件add,如: git add 1.txt 2.txt
文件名稱也可以使用通配符 * 等進行操做,如: git add *.txt,表示保存全部 .txt 後綴文件至暫存區 (有關文件通配符請自行google瞭解)
若需查閱工做區與暫存區的差別,可用 git diff
git diff 工做區與暫存區相比的差別
工做區刪除了文件,若暫存區也須刪除,可用 git rm <file>
git rm <file> 暫存區刪除文件,可多個,空格分隔
若大批量 增、刪、改文件,顯然一個個添加或刪除是不可取的,如下命令可快捷操做暫存區(建議練習使用,加深對如下幾個命令的理解):
git add -A 暫存區與工做區保持一致(stages All)
git add . 暫存區新建文件及更改文件(stages new and modified, without deleted)
git add -u 暫存區刪除文件及更改文件(stages modified and deleted, without new)
注意:git add 不支持添加空文件夾,可參考 http://www.zhihu.com/question/29811994
git commot -m "<message>" 把暫存區的全部修改提交到分支,須輸入描述信息
例如:若暫存區已加入了 1.txt 文件,提交至分支(目前是 master) git commit -m "add 1.txt" ;未 commit 前,git status 會提示未提交;commit 過程會有代碼顯示以下。
如今版本庫變成了這樣,暫存區就沒有任何內容了:
小結
暫存區是Git很是重要的概念,弄明白了暫存區,就弄明白了Git的不少操做到底幹了什麼。