Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念,本文主要的目的就是给大家介绍清楚什么是暂存区.
一、工作区
Working Directory其实就是个文件夹。GitRepository1文件夹就是个工作区。
二、版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
三、案例演示
修改read.txt文件,添加一行信息
hello git
hello git 2
hello git 3
hello git 4
新添加一个文件listener.txt
查看状态
此时的结构图为:
执行add命令
此时的结构图为:
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
执行commit操作
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
此时的结构图为:commit后暂存区就没有任何东西了
四、管理修改案例
为了进一步理解暂存区和工作区,我们通过具体例子我们来演示下
对read.txt文件进行修改
执行add操作
第二次对文件进行修改
执行commit操作
执行status操作
我们发现commit操作并没有将我们第二次修改的记录提交,因为我们只对第一次修改的记录执行了add操作,将这次修改的操作提交到了暂存区,第二次修改的信息还是在工作区,而commit操作只能将暂存区的数据提交,查看工作区和版本库中最新版本的区别通过 git diff HEAD – read.txt
那怎么提交第二次修改呢?你可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了,
五、撤销管理
我们在开发过程中难免会出现bug,有代码需要撤销。这节就介绍撤销的几种场景。
未提交到暂存区
修改内容
撤销
撤销命令 git checkout – file
注意 update2也被撤销了,因为上个案例中update2也是被添加后没有执行add操作,所以一并也被撤销了。
提交到暂存区
有时我们会将数据提交到暂存区后才发现有问题,需要撤销,我们来看看怎么办
git 提示告诉我们可以通过 git reset HEAD file撤销命令
将修改从暂存区回退到工作区
回退到工作区我们就可以通过 git checkout – read.txt撤销
commit后
如果是内容已经被提交到了最新版本库中,但并没有提交到远程库中,则我们可以通过版本回退的方式撤销。
版本回退
六、删除管理
删除文件并版本库中删除
删除文件并从版本库找回
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
总结
工作区(Working Directory)
是我们直接编辑的地方,例如eclipse打开的项目,记事本打开的文本等,肉眼可见,直接操作。
暂存区(Stage 或 Index)
数据暂时存放的区域,可在工作区和版本库之间进行数据的友好交流。
版本库(commit History)
存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程仓库了。