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可以一次性把暂存区的所有修改提交到分支。
工作区(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
(use "git checkout --
modified: readme.txt
Untracked files:
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
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可以一次性把暂存区的所有修改提交到分支。
没有评论:
发表评论