Git和其他版本控制系统的一个不同之处就是有 暂存区 的概念。这也是Git高效率的原因。
1,工作区(Working Directory)
工作区就是电脑中的任意目录,比如"git命令快速入门章节"中的 /d/GitTestRepos/git003 目录就是一个工作区:
2,版本库(Repository)
工作区里面有一个隐藏目录 .git ,这个目录不算作工作区,而是Git的版本库。
注意:千万不要去乱动 .git 目录的内容。
Git的版本库中存储了很多东西,其中最重要的就是称为 stage(或者叫idnex)的暂存区,还有Git默认创建的主分支 master,以及指向 master 的一个指针叫 HEAD(Git对象库章节会详细说明)。
前面讲解了往Git版本库中提交文件的时候,是分为两个步骤的:
1:使用 git add 命令添加文件,实际上就是把文件变更添加到 暂存区;
2:使用 git commit 命令提交,实际上就是把 暂存区 的所有内容都提交到 当前分支;
因为创建Git版本库时,系统默认创建了唯一一个master分支,所以,git commit 就是往 master 分支上提交。
可以简单理解为,将需要提交到版本库的的所有文件变更通通放到 暂存区,然后,一次性提交 暂存区 中的所有修改。
暂存区 是Git中非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了些什么。
git diff 命令
故名思意,该命令会对选择的两个不同的根级树对象进行比较。
通常,git diff 命令进行树的比较时可以通过 提交ID,分支名或者表签名。git diff 命令使用这三种来源的组合进行如下4种基本比较:
1,git diff
会显示 工作区 和 暂存区 之间的差异。同时会显示工作区里的变更文件,并把这个变更文件作为下一个提交暂存的候选。
2,git diff [commit]
显示 工作区 和给定提交之间的差异。常见的一种用法是用 HEAD 或者一个特定的分支名。
3,git diff --cached [commit]
显示 暂存区 和给定提交之间的差异。如果省略commit,则默认为 HEAD。
在 Git 1.6.1 及以后的版本可以使用同义词 --staged,更容易理解。
4,git diff [commit1] [commit2]
显示两个给定提交之间的差异。