git中工作区,暂存区和仓库的概念

工作区>>>>暂存区>>>>仓库

初始化完成后,三个区域都是空的,这个时候记录就算是初始化了,开始记录这三者差异。

在工作区创建一个新的文件test.txt,先add到暂存区,这时可以使用git diff来查看工作区和暂存区的差异(操作1),当然,这里肯定是没有差异的!记住,这里是比较差异,不存在哪个区的数据没有了或空了,因为数据只有一份。

然后,你在工作区对test.txt进行修改(并没有将暂存区提交到仓库),修改保存后,同样可以使用git diff来查看工作区和暂存区的差异(操作2),当然,这里肯定是有差异的!

在你并没有再次进行git add test.txt操作前,使用git commit将暂存区(第一次add的test.txt版本)提交到仓库,这时仓库就有了第一个版本的test.txt文件。

这时你同样可以使用git diff来查看工作区和暂存区的差异,和操作2的结果是不是一样的?对,是一样的。因为你并没有git add,工作区和暂存区数据存在差异。

这时你使用git diff --cached来查看暂存区和仓库的差异(操作3),当然,这里肯定是没有差异的!同样是因为你并没有再一次git add。

好了,你开始执行第二次git add,执行完后,再试试git diff操作,是不是发现没有差异了?可以证明这里确实比较的是工作区和暂存区的数据差异了吧!

好,再试试git diff --cached操作,是不是发现有差异了?也证明了这里确实比较的是暂存区和仓库的数据差异。

另外,我还想说一下git add的反向命令git checkout,就是将工作区提交到暂存区的数据撤销掉。以及git commit的反向命令git reset HEAD,就是将提交到暂存区的数据以仓库数据为基准撤销暂存。

相关推荐