Git 學習(三)本地倉庫操作——git add & commit
Git 和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。這在上文已有提及,本文具體說明什么是工作區及暫存區,以及如何使用本地git庫的操作命令:重點 git add 及 git commit 。
回顧上一章節版本庫創建: 先將 D:盤下的 learngit 整個文件夾刪除,然后創建空的 Git 版本庫。
工作區 和 版本庫
工作區(Working Directory)即操作系統中看到的文件夾,如 d:/learngit ,目前工作區是空的。
工作區有一個隱藏目錄.git
,這個不算工作區,而是Git的版本庫(Repository)。Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
第一步:git add
把文件添加進去,實際上就是把文件修改添加到暫存區
第二步:git commit
提交更改,實際上就是把暫存區的所有內容提交到當前分支(創建Git版本庫時,Git自動創建了master
分支; 所以,目前 git commit
就是往master
分支上提交更改;分支的概念之后章節會詳細說明)
可簡單理解為,需要提交的文件修改通通放到暫存區;然后,一次性提交暫存區的所有修改。下面具體說明 git add 及 git commit 操作 (有興趣的可關注下 git add 和 commit 文件后 .git 目錄的變化)
暫存區操作 git add
暫存區操作使用 git add 命令,git add <filename> 可以添加單個文件至暫存區,我們可在當前空的 learngit 文件夾中加入文件;此時,暫存庫(stage)中會存有之前 add 的文件。
git add <file> 把單一指定文件加入至暫存區(須加后綴格式)
例如:在該文件夾中新建一空的 1.txt 文件,將該文件加入暫存區,需 git add 1.txt ; 未 add 前,git status 會提示(紅框)。
若修改了該 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 commit
git commot -m "<message>" 把暫存區的所有修改提交到分支,須輸入描述信息
例如:若暫存區已加入了 1.txt 文件,提交至分支(目前是 master) git commit -m "add 1.txt" ;未 commit 前,git status 會提示未提交;commit 過程會有代碼顯示如下。
現在版本庫變成了這樣,暫存區就沒有任何內容了:
小結
暫存區是Git非常重要的概念,弄明白了暫存區,就弄明白了Git的很多操作到底干了什么。