一般在不少传统集中式版本控制系统中,只有两个空间用来管理你的数据,一个是你的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权威指南》一书。