Appearance
Git
Git = 记录项目历史快照的版本管理系统
关于版本控制系统 VCS
版本控制系统(version control system) 记录项目历史变化的工具
在整个开发过程中,代码会不断进行:
- 修改、增加删除
每一次
commit都会进行一次项目快照记录,形成历史版本
git本质上是记录快照,每一次commit的本质是整个项目文件的一次快照
版本控制系统作用
版本退回
- 可以回到某个历史版本
git checkout 某个版本修改记录
- 可以查看修改操作人、修改时间、修改原因等
git blame分支开发
- 不同功能并行开发
main
│
├── login-feature
└── payment-feature多人协作
- 多人同时开发,负责不同的功能板块
git mergeGit的历史结构--GAD
git 的历史提交是一个GAD(Directed Acyclic Graph)
- 有向无环图
o ← o ← o ← o
↑
\
o ← oGit的数据类型
Git有三种核心对象
blob
- 文件内容,本质上就是一段字节数据
blob = array<byte>tree
- 表示目录结构
tree = map<name, blob | tree>root
├── foo
│ └── bar.txt
└── baz.txtcommit (提交)
- 父commit
- 作者
- 提交信息
- 项目快照(tree)
commit {
parents
author
message
snapshot(tree)
}Git 的对象储存
Git 的所有对象都是通过SHA-1 哈希值储存
objects = map<hash, object>- 内容相同哈希值就相同
- 对象不可修改
- 被修改后的文件生成新的对象
References(引用)
由于 commit 的 hash 很长,不方便记忆, Git 使用 reference(引用)来指向 commit。
例如:
main → a3f5c9d
dev → 91f83aabranch 本质就是一种 reference。
HEAD
HEAD 是一个特殊的 reference, 表示当前所在的位置。
结构:
HEAD → branch → commit
Git的本质
包含两个部分:
.git
├── objects
└── references但是所有的git 的操作本质都是:修改 commit DAG
Staging Area 暂存区
主要作用是控制提交的内容
(git add). (git commit)
工作区 ------> 暂存区 ----->. 生成 commit常用的操作
版本退回
git checkout查看修改记录
git blame分支开发不同功能并行开发
main
│
├── login-feature
└── payment-feature合并
git merge