Git 工作区和暂存区
工作区
电脑里能看到的目录就是工作区
版本库
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
练习
修改readme.txt 文件
[root@node1 git]# cat readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage.
在工作区新增一个 名为 license 的文本文件,内容可以随便写
[root@node1 git]# cat license.txt
ni hao
先用git status 查看一下状态
[root@node1 git]# 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.txt no changes added to commit (use "git add" and/or "git commit -a")
Git非常清楚地告诉我们,readme.txt
被修改了,而license.txt 还从来没有被添加过,所以它的状态是Untracked
使用 两次 git add,把readme.txt和 license.txt 都添加后用 git status 查看
[root@node1 git]# git add readme.txt
[root@node1 git]# git add license.txt
oot@node1 git]# git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: license.txt # modified: readme.txt
现在,暂存区的状态就变成这样了
所以,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
root@node1 git]# git commit -m "understand how stage works" [master ebdaace] understand how stage works 2 files changed, 2 insertions(+) create mode 100644 git/license.txt
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
[root@node1 git]# git status
# On branch master
nothing to commit, working directory clean
现在版本库变成了这样,暂存区就没有任何内容了