标签:
本帖,我们一起来看看分布式版本控制系统Git与集中式版本控制系统SVN等系统的不同之处:暂存区
(本帖原版来自廖雪峰老师的博客,这里只是进行了稍微修改与整理,因为廖雪峰老师写的很详细,也很实在,这里不能步说一下。原版内容大家可以参考本系列贴的第一贴。)
首先,我们一起分析几个专有名词:
就是你在电脑里能看到的目录,比如maxingit文件夹就是一个工作区:
2、版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
通过上图,可以明显的看出:
· 第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
· 第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。 ---> 创建Git版本后,系统会自动新建一个唯一分支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 <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: readme.txt # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # License no changes added to commit (use "git add" and/or "git commit -a")
Ok,我们发现readme.txt
被修改了,而License
还从来没有被添加过,所以它的状态是Untracked
。
(4)现在,使用两次命令git add
,把readme.txt
和License
都添加后,用git status
再查看一下:
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: LICENSE # modified: readme.txt
现在,暂存区的状态就变成这样了:
所以,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage)。
(5)然后,执行git commit就可以一次性把暂存区的所有修改提交到分支:
$ git commit -m "understand how stage works" [master 27c9860] understand how stage works 2 files changed, 675 insertions(+) create mode 100644 LICENSE
(6)git status:
$ git status
# On branch master
nothing to commit (working directory clean)
现在版本库变成了这样,暂存区就没有任何内容了:
标签:
原文地址:http://www.cnblogs.com/pepsimaxin/p/4872596.html