对于git的命令使用得虽多,但总是一知半解,知其然不知其所以然,要能够深入的理解这些命令,必须得理解一些关键性的概念或者说是对象。正如要理解maven一样,首先要理解pom(项目对象模型)这个概念。
首先要理解工作区,暂存区以及版本库这三个概念,你本地电脑上的一个git项目就是由这三个对象组成的。
工作区就是在硬盘中打开一个git项目的文件夹,你看到这个目录下的所有文件及子目录都是工作区,你在这个目录下使用任何方式(除了git 命令)操作文件,在git中都是对于工作区的操作。
版本库其实也是你git项目目录下的一个文件夹,不过它是一个隐藏的文件夹,具体细节不用太深究。这个版本库就管理了这个git项目的各种历史版本,这个git项目的各种不同版本的详细信息都记录在版本库里面
暂存区也是项目下的一个隐藏文件夹,在逻辑上可以看作介于工作区和版本库中间的一个区域,见名知意,它就是一个暂时保存更改的一个区域。
这个三个区域可以按照修改的频繁度来排序,设计逻辑也可以这样来理解。工作区是直接操作的区域,也就是频繁修改的区域。每一次修改不可能都生成一个版本,但是有需要保存某些修改,所以可以把一些修改保存到暂存区。当暂存区累积了一些修改,需要把这些修改生成一个版本的时候,就把这些修改提交到版本库,然后就在版本库中生成了这个项目的一个新版本,包含了这次提交的修改。这就是本地git的一个简单流程了。
理解了这三个对象之后,对git的很多命令的用法也就能够理解了。比如git diff 命令:
git diff 是工作区与暂存区的差异比较
git diff --cached 是暂存区和版本库中HEAD(版本库的一个指针变量,指向某一次提交)指向的一个提交的版本比较
git diff HEAD 是工作区与版本库HEAD指向的一个提交的版本比较
还有其他的git命令无非就是这三个区域的交互。