Git 本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或 Git Directory)、git 仓库(Remote Directory)。
git 的四个区域之间的转换关系如下图:
git区 | 说明 |
---|---|
Workspace | 工作区,就是你平时存放项目代码的地方。 |
Index / Stage | 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。 |
Repository | 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中 HEAD 指向最新放入仓库的版本 |
Remote | 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。 |
git 的工作流程一般是这样的:
因此,git 管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)。
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
GIT 不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用 SHA-1 算法计算文件的校验和。
具体解释如下:
状态 | 说明 |
---|---|
Untracked | 未跟踪,此文件在文件夹中, 但并没有加入到 git 库, 不参与版本控制. 通过 git add 状态变为Staged。 |
Unmodify | 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处,如果它被修改,而变为 Modified。 如果使用 git rm 移出版本库, 则成为 Untracked 文件。 |
Modified | 文件已修改,仅仅是修改,并没有进行其他的操作。这个文件也有两个去处,通过 git add 可进入暂存 staged 状态, 使用 git checkout 则丢弃修改过,返回到 unmodify 状态, 这个 git checkout 即从库中取出文件,覆盖当前修改。 |
Staged | 暂存状态,执行 git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存,文件状态为 Modified。 |
转换关系如下图所示:
Git 本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或 Git Directory)、git 仓库(Remote Directory)。