Git总的来说,分为两大块: 工作区和版本库
工作区:就是你的源代码文件目录,比如 d:\work
版本库:就是你工作区目录下的那个隐藏子目录d:\work\.git 。版本库又分为暂存区和分支库。
GIT | ||
工作区 | 版本库:d:\work\.git | |
d:\work file1.java file2.java … | 暂存区 | 分支库 |
git add 后,文件就是暂存到这里 | HEAD指针 MAST等分支库 |
回顾一下建立第一个版本库的过程
1, git add file.java 其实就是把工作区的file.java文件,提交到版本库的暂存区。
2, git commit 就是把暂存区的内容,提交到分支库(当前分支)
我们创建版本库git init的时候,git就自动给我们建立了一个分支master ,所以我们的提交就是提交到这个master分支上的。
用实验来说明一下:首先新建一个文件,然后查看状态。
=========
[root@localhost myPHP]# touch file1.java
[root@localhost myPHP]# git status
位于分支master
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
file1.java
提交为空,但是存在尚未跟踪的文件(使用"git add" 建立跟踪)
=========
可以看到,git 对于工作区的任何改动,都会进行监测。这个时候的状态如下:
工作区 | 版本库 | |
file1.java | 暂存区 | 分支库 |
| HEAD MAST |
即只有工作区存在file1.java 文件,git 版本库中还没有任何信息。
那么我们git add file1.java然后在看看
=========
[root@localhost myPHP]# git add file1.java
[root@localhost myPHP]# git status
位于分支master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: file1.java
=========
这个时候,工作区和版本库是如下状态:
工作区 | 版本库 | |
file1.java | 暂存区 | 分支库 |
file1.java | HEAD MAST |
然后,我们继续提交
[root@localhost myPHP]# git commit -m"file1.java"
[master 23dc945] file1.java
1file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1.java
[root@localhost myPHP]# git status
位于分支 master
无文件要提交,干净的工作区
[root@localhost myPHP]#
这个时候,工作区和版本库是如下状态:
工作区 | 版本库 | |
file1.java | 暂存区 | 分支库 |
空 | HEAD -> 指向MAST MAST -- file1.java |
也就是说,提交时把暂存区的内容,提交到当前的分支库里,提交完后,暂存区就清空了。这个时候,工作区因为没有什么修改,所以是“干净的工作区”。