上一节中学习了常用的版本管理方法,比如查看日志和版本回退前进等等。今天来讲解一下Git存储区相关的一些东西。主要介绍两个概念—工作区和暂存区。这里的暂存区比较重要,SVN里是没有这个概念的。
工作区(Working Directory)
工作区就是我们可以看到的工作目录。就是之前建立的用来保存Git工作文件的目录下的所有空间。这个没有什么需要详细介绍的。
版本库(Repository)
廖老师的解释是:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。但是我觉版本库应该是包括.git文件在内的工作区,类似GitHub中的仓库。
暂存区(Stage/Index)
最后就是今天最重要的概念—暂存区。之前学到过,提交一个改动需要进行两步操作git add和git commit,这里的add操作实际上就是讲文件添加到暂存区里。而commit实际上就是把暂存区的内容提交到当前分支。一个分支中会有多次提交记录,可以把每个分支看成一个线路,把每次提交看成这条线路上的一个节点,分支相关的东西会在之后讲解到。然后我们来练习一下上面的内容。首先同样修改之前文件的内容:
this boy is huper
and he's so stupid!
added version 1.
added version 2.
added version 3.
added stage test.
为了反映Stage的功能,我们在工作区新建一个文件huper2.txt,这里我们引入一个新的命令,如下:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: huper.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
huper2.txt
no changes added to commit (use "git add" and/or "git commit -a")
这个命令的功能是查看当前工作区各个改动的状态,比如说这里显示出来的两个改动就是我之前添加的:文件内容修改和添加新文件。我们仔细看下这两个状态,第一条信息里说:
Changes not staged for commit
意思就是说当前变动没有添加到暂存区里。然后底下给出了可行的选项:
1.使用add命令将改动添加到暂存区。
2.使用checkout命令撤销改动。
然后看第二条信息的描述:
Untracked files
意思就是说,由于我们在工作区添加了一个新的文件,这个文件并没有被版本库追踪到(就是从来没有添加过),给出的选项是使用add命令添加到暂存区使用commit命令进行提交。
接下来我们根据相应的命令,添加相应的文件,然后在使用状态命令查看文件状态:
$ git add huper.txt huper2.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: huper.txt
new file: huper2.txt
可以看到,这时候master分支里的所有改动文件都被添加到暂存区了。并且附加信息里提醒我们还需要进一步commit。我们在commit以后继续使用status命令查看:
$ git status
On branch master
nothing to commit, working tree clean
总结:
主要就是git status的用法以及暂存区的概念。