02.Git从放弃到入门:状态与阶段

1,034 阅读3分钟

前言

本文介绍下git十分重要且易混淆的一些基础概念。

本系列更多文章详见专栏 📚 Git从放弃到入门

基础概念

上文中,示例展示了如何创建仓库、暂存提交更改、查看历史纪录等操作。基本的工作流程如下:

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

接下来将上述提到的概念术语一一解释。

三种状态

Git 有三种状态,文件可能处于其中之一: 已提交(committed)已修改(modified)已暂存(staged)

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

三个阶段

这会让Git 项目拥有三个阶段:工作区(Working Directory)、暂存区/索引(Staging Area / Index)以及 Git 目录/仓库(.git directory / Repository)。

  • 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

文件状态

工作目录下的每一个文件都不外乎这两种状态:已跟踪未跟踪

已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。

Git阶段流转

image.png

  • 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 命令将在后续文章中详细介绍。

图解文件状态变化

基于三种状态、三个阶段、文件状态等概念关系绘制了张流程图👇。

image.png

📚参考&关联阅读

Pro Git Online

关注专栏

如果本文对您有所帮助请关注➕、 点赞👍、 收藏⭐!您的认可就是对我的最大支持!

此文章已收录到专栏中 👇,可以直接关注。