2015年4月20日星期一

Git_004:学习笔记之四:工作区和暂存区 (摘录+整理)

Git和SVN的另外一个不同之处是暂存区。

工作区(Working Directory):就是你在电脑里能看到的目录,比如learngit文件夹就是一个工作区:
版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

使用git add把文件添加进去,实际上就是把文件修改添加到暂存区。
使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一的一个master分支,所以git commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改。

我们通过以下实验来理解暂存区。
1. 先对readme.txt做个修改,增加一行内容,添加后内容如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.

2. 在工作区新增一个LICENSE文件

3. 运行 git status 查看状态
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    modified:   readme.txt

Untracked files:

  (use "git add ..." to include in what will be committed)

    LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

4. 添加readme.txt和LICENSE文件
(1)$ git add readme.txt
(2)$ git add LICENSE

5. 再次运行 git status 查看状态
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    new file:   LICENSE
    modified:   readme.txt
现在,暂存区的状态就变成这样了:



6. 提交修改
$ git commit -m "understand how stage works"
[master 35df8cb] understand how stage works
 2 files changed, 1 insertion(+)
 create mode 100644 LICENSE
现在版本库变成了这样,暂存区就没有任何内容了:

所以,git add命令把要提交的所有修改放到暂存区,然后,执行git commit可以一次性把暂存区的所有修改提交到分支。

没有评论: