Git

Git学习笔记 03

工作区和暂存区

Posted by Huper on December 12, 2017

上一节中学习了常用的版本管理方法,比如查看日志和版本回退前进等等。今天来讲解一下Git存储区相关的一些东西。主要介绍两个概念—工作区和暂存区。这里的暂存区比较重要,SVN里是没有这个概念的。

工作区(Working Directory)

工作区就是我们可以看到的工作目录。就是之前建立的用来保存Git工作文件的目录下的所有空间。这个没有什么需要详细介绍的。

版本库(Repository)

廖老师的解释是:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。但是我觉版本库应该是包括.git文件在内的工作区,类似GitHub中的仓库。

暂存区(Stage/Index)

最后就是今天最重要的概念—暂存区。之前学到过,提交一个改动需要进行两步操作git addgit 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的用法以及暂存区的概念。