技术分享 · Git 协作入门
Git 不是魔法,
先看懂
==历史怎么走==
从对象和指针,走到分支与合并。
技术分享 · Git 协作入门
从对象和指针,走到分支与合并。
一 · 对象
保存内容,不保存文件名。
记录名字、模式与对象引用。
关联根 tree、父提交与元数据。
保存目标、说明与打标者信息。
概念依据:Pro Git · Git Objects;轻量标签只是引用,不创建 tag 对象。
快照
文件名写在 tree 里;内容没有变化,就能复用同一个 blob。
关系示意,省略父提交与元数据;依据:Pro Git · Git Objects。
二 · 指针
两个分支可以指向同一次提交。
分支名不同,文件不必复制一份。
git switch -c feature
正常附着状态下,HEAD 指向当前分支。
A、B 为合成提交标识;依据:Pro Git · Branches in a Nutshell。
三 · 整合
M 同时引用 C 和 D,已有提交保持不变。
连线表示历史关系,时间从左到右;演示非 fast-forward 的双分支合并。
重放
D 的改动应用到 C 之后,得到 D′;父提交改变,标识随之改变。
关系为合成示意;原 D 仍可能由 reflog 等引用保留,不会因重放立即消失。
协作选择
| 需要保留什么 | 可选方式 | 先检查什么 |
|---|---|---|
| 分支整合的来路 | merge | 是否已分叉、是否需要合并节点 |
| 线性的个人提交 | rebase | 是否有人依赖这段历史 |
两条路径可能得到相同文件内容;冲突处理不同,结果也可能不同。
依据:Pro Git · Basic Branching and Merging / Rebasing。
下次敲命令之前
用对象图解释一次提交,再解释一次合并。