[toc]
chapter(三)
3.1 暂存区概念对Git很重要
暂存区是什么呢? 我们先谈谈别的概念:
- 工作区(woking directory) :工作区就是能看到的电脑目录。 如:
toto@pc:~/code/testGit$ pwd
/home/toto/code/testGit
命令:pwd
后显示的目录,就是工作目录。
- 仓库有名版本库(repository) : 多说无益,直接看看
toto@pc:~/code/testGit$ ls -ah
. .. .git helloword.cpp
这个.git
是什么呢?是的!就是版本库!
*Figure3.1*显示的版本库中里就有一个*stage*,这个*stage*就是暂存区
图片太形象了,我们在工作区,使用命令`git add`,将`helloword.cpp`提交到*stage*中。
之前使用过`git init`,那时Git就为我们创建了一个分支`master`,以及指向`master`的指针`HEAD`
再使用命令`git commit`,有把再*stage*(暂存区)内容提交到了分支`master`中!
这样就能理解为何之前说`git add`可以执行很多次,那是因为`git add`只是把它放到暂存区中了。只有执行了`git commit`才会放在分支`master`中。 3. 所以暂存区的概念就很清晰了!
3.2 再次理解暂存区的概念
- 有了
helloword.cpp
,我感觉不够用,因为拿到代码的人可能不懂这是干什么呢?所以,我必须写一个说明文档README.txt
vim README.txt
写下如下内容:
This document is a description!
The name is README.txt!
在看下状态:
toto@pc:~/code/testGit$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.txt
nothing added to commit but untracked files present (use "git add" to track)
可以看到Git
告诉我们,新增加了一个README.txt
- 我又想在
helloword.cpp
中增加东西。vim helloword.cpp
写下如下内容:
#include<iostream>
int main()
{
std::cout << "This is a program that test Git!" << std::endl;
std::cout << "test git status" << std::endl;
std::cout << "test git status2" << std::endl;// 新增的一行
int a = 1;
return 0;
}
在查看下状态:
toto@pc:~/code/testGit$ 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: helloword.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以看到Git
告诉我们helloword.cpp
被修改了,而README.txt
还未被添加!
git add
下
toto@pc:~/code/testGit$ git add helloword.cpp README.txt
toto@pc:~/code/testGit$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README.txt
modified: helloword.cpp
toto@pc:~/code/testGit$
可以看到暂存区(stage)已经被放了两个文件
git commit
下
toto@pc:~/code/testGit$ git commit -m "understand stage"
[master 7064df2] understand stage
2 files changed, 3 insertions(+)
create mode 100644 README.txt
toto@pc:~/code/testGit$ git status
On branch master
nothing to commit, working tree clean
此时,版本库就是这样子了:
3.4 暂存区补充
如果一个文件没有进行git add
,那还能git commit
吗?
仔细想想!
如果有了暂存区的概念,这个答案就很简单:
未从工作区 git add
到暂存区,就无法从暂存区 git commit
到 master
中!
3.5 暂存区总结
总结就是自己实践去跟着做一遍!