6.1 原子变更集
每一个给git的提交都代表一个相对于之前的状态的单个原子变更集,对于提交中的改动,要么全部成功要么全部失败
6.2提交的识别
用40位的SHAI值来当作提交的名字,对于全局,和所有的数据库都是唯一的,可以使用版本对象库中的唯一前缀来
缩短他
1. 引用和符号引用:
引用ref是一个散列值,通常指向提交对象,而符号引用(symref)间接指向git提交对象。本地特性分支名,远程跟踪分支名,标签名都是引用。
2.git自动维护几个用于特定目的的特殊符号英语,这些引用可以在任何提交的地方使用
HEAD:始终指向当前分支的最近提交
ORIG_HEAD:一些合并或者复位操作会新值之前的版本,把新值之前的版本记录到ORIG-HEAD版本中,可以使用它来回滚或使用之前的状态来比较
FEATCH—HEAD:使用远程库是,git FEATCH-HEAD命令抓取所有分支头记录在.git/featch-head中
MEARGE-HEAD:一个合并操作时,其他的分支头记录在MEARGE-HEAD中,换而言之,它是正在合并进HEAD的提交
3.相对提交名:每一次提交都有一个父提交,它来自一个比它更早的父提交,插入符号^是选择不同的父提交的,C^1 C^2 C^3是第一个第二个第三个父提交。~用于返回父提交之前选择上一代提交如C~1,c~2为父提交和祖父提交,可以将^和~进行组合
git rev -parse命令最终决定把任何形式的提交名–标签、相对名、简写或绝对名称都转换为对象库中的实际的绝对的提交散列
6.3 提交历史记录
查看旧提交:
主要的命令是:git log == git log HEAD,从提交开始回溯,依附于提交图回溯
提供一个提交名: git log commit: 从该位置开始回溯
限制提交的范围:git log --pretty=short --abbrev-commit master~12..master~10;显示master~10和master~11提交,前面引入了--pretty=short 和-abbrev-commit,前者调整了每个提交的信息数量,后者简单的缩写散列ID --stat选项列举了提交中所改的文件以及每个更改的文件中有多少行改变
查看对象库中对象信息的命令是git show 可以用查看某个提交 git show HEAD~2
提交图:git使用的是有向无环图
提交的范围:有尾无首
查找提交:git bisect;确定一个坏的版本默认为HEAD,从一个干净的目录启动git bisect,告诉git查找的版本好坏,然后git进行二分查找,git会维护一个日志来记录你的回答及提交ID用git bisect log
GIT使用blame,告诉你每个文件的每一行是谁修改的和哪次提交做出了变更