## 1.3 Git 基础
**直接记录快照,而非差异比较**
Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异;若文件数据发生变化,Git 会将文件作快照后,记录在一个微型的文件系统中;每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引;若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

**近乎所有操作都是本地执行**
Git 在本地磁盘上就保存着所有当前项目的历史更新。
**时刻保持数据完整性**
在保存到 Git 之前,所有数据都要进行内容的校验和(Checksum)计算,并将此结果作为数据的唯一标识和索引(而不是文件名);Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 `SHA-1` 哈希值,作为指纹字符串。该字符串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:
```
24b9da6552252987aa493b52f8696cd6d3b00373
```
**多数操作仅添加数据**
常用的 Git 操作大多仅仅是吧数据添加到数据库。因为任何一种不可逆的操作,比如删除数据,都会使回退或重现历史版本变得困难。
**三种状态**
Git 文件有三种状态:已提交(committed)、已修改(modify)和已暂存(staged)
* 已修改:表示修改了的文件,但是还没有保存到数据库中
* 已暂存:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
* 已提交:表示数据已经安全地保存在本地仓库的数据库中
由此对应 Git 中三个工作区域的概念:
* 工作目录(Working Directory):修改过的文件,但并未通过 Git 跟踪
* 暂存区域(Stage):一个文件,保存了下次将提交的文件列表信息
* 仓库目录(Repository):工作区中的隐藏目录 `.git` ,用来保存项目的元数据和对象数据库的地方

基本的 Git 工作流程:
* 在工作目录中修改文件
* 暂存文件,将文件的快照放入暂存区域
* 提交更新,找到暂存区域的文件,将快照永久性储存到 Git 仓库目录
- 介绍
- 第一章 起步
- 1.1 关于版本控制
- 1.2 Git 简史
- 1.3 Git 基础
- 1.4 命令行
- 1.5 安装 Git
- 1.6 初次运行 Git 前的配置
- 1.7 获得帮助
- 第二章 基础
- 2.1 获取仓库
- 2.2 记录每次更新到仓库
- 2.3 查看提交历史
- 2.4 撤销操作
- 2.5 远程仓库的使用
- 2.6 打标签
- 2.7 Git 别名
- 第三章 分支
- 3.1 分支简介
- 3.2 分支的新建与合并
- 3.3 分支管理
- 3.4 分支开发工作流
- 3.5 远程分支
- 3.6 变基
- 第四章 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上搭建 Git
- 4.3 生成 SSH 公钥
- 4.4 配置服务器
- 4.5 Git 守护进程
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管的选择
- 第五章 分布式 Git
- 5.1 分布式工作流程
- 5.2 向一个项目贡献
- 5.3 维护项目
- 第六章 GitHub
- 6.1 账户的创建和配置
- 6.2 对项目做出贡献
- 6.3 维护项目
- 6.4 管理组织
- 6.5 脚本 GitHub
- 第七章 Git 工具
- 7.1 选择修订版本
- 7.2 交互式暂存
- 7.3 储藏与清理
- 7.4 签署工作
- 7.5 搜索
- 7.6 重写历史
- 7.7 重置揭密
- 7.8 高级合并
- 7.9 Rerere
- 7.10 使用Git调试
- 7.11 子模板
- 7.12 打包
- 7.13 替换
- 7.14 凭证存储
- 第八章 自定义 Git
- 8.1 配置 Git
- 8.2 Git 属性
- 8.3 Git 钩子
- 8.4 使用强制策略的一个例子
- 第九章 Git 与其他系统
- 9.1 作为客户端的 Git
- 9.2 迁移到 Git
- 第十章 Git 内部原理
- 10.1 底层命令和高层命令
- 10.2 Git 对象
- 10.3 Git 引用
- 10.4 包文件
- 10.5 引用规格
- 10.6 传输协议
- 10.7 维护与数据恢复
- 10.8 环境变量
