前言
本文介绍下git十分重要且易混淆的一些基础概念。
本系列更多文章详见专栏 📚 Git从放弃到入门 。
基础概念
上文中,示例展示了如何创建仓库、暂存提交更改、查看历史纪录等操作。基本的工作流程如下:
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。
接下来将上述提到的概念术语一一解释。
三种状态
Git 有三种状态,文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
三个阶段
这会让Git 项目拥有三个阶段:工作区(Working Directory)、暂存区/索引(Staging Area / Index)以及 Git 目录/仓库(.git directory / Repository)。
- 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
- Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
文件状态
工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。
工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。
Git阶段流转
- git add files 把文件放入暂存区。
- git commit 给暂存区生成快照并提交。
- git reset -- files 用来撤销最后一次 git add files,也可以用 git reset 撤销所有暂存区文件。
- git checkout -- files 把文件从暂存区复制到工作目录,用来丢弃本地修改。
跳过使用暂存区域
- git commit -a 相当于运行 git add 把所有当前目录下的文件加入暂存区再运行。
- git commit files 进行一次包含最后一次提交加上工作目录中文件快照的提交,并且文件被添加到暂存区。
- git checkout HEAD -- files 回滚到复制最后一次提交。
上述部分 git 命令将在后续文章中详细介绍。
图解文件状态变化
基于三种状态、三个阶段、文件状态等概念关系绘制了张流程图👇。
📚参考&关联阅读
关注专栏
如果本文对您有所帮助请关注➕、 点赞👍、 收藏⭐!您的认可就是对我的最大支持!
此文章已收录到专栏中 👇,可以直接关注。