git对象(简单了解)
每次提交都有tree、parent、author、committer
➜ demo git:(master) ✗ git log --pretty=raw --graph 50bceb7c6f5
* commit 50bceb7c6f598c258a1502f25f7bc08220635aea
| tree 9d1cf4f29cf360391811eb69f8eeb6859a029c11
| parent 81b09ecc5f2f0222ede2b474efb1d8da9b04714e
| author dataiyangu <32248827@qq.com> 1552315059 +0800
| committer dataiyangu <32248827@qq.com> 1552315059 +0800
|
| a
|
* commit 81b09ecc5f2f0222ede2b474efb1d8da9b04714e
| tree 86761909e740889c54721914f2e942218982991f
| parent 1e20fe7563a4b4bf8a091fe6c55ca9f32786224c
| author dataiyangu <32248827@qq.com> 1552277904 +0800
| committer dataiyangu <32248827@qq.com> 1552277904 +0800
|
| add
|
* commit 1e20fe7563a4b4bf8a091fe6c55ca9f32786224c
| tree 529ca55c0571956f6e1b1290a77675ba72a64938
| parent ed97a5e3d4ae753183e6a796625dfca1f83c1f61
| author dataiyangu <32248827@qq.com> 1552277753 +0800
| committer dataiyangu <32248827@qq.com> 1552277753 +0800
|
| a
–pretty=raw没有加任何加工的,原先是什么就是什么,参数还可以指定为oneline、short、full、fuller、emial、raw、farmat等
–graph 50bceb7c6f5展现对象之间的关系
左边的竖线表示这里是一个链表的关系,通过parent来连接,可以看到上面代码中第一个parent的号就是第二个的commit号,最早的那次提交是没有parent的,这也就是为什么git切换分支特别快。
tree类似于目录a文件夹下有b和c,c下有d和e,a和c都是tree,有点递归的感觉。
对象是存在哪里的?
就是存在版本库的objects目录中,通过hash值前两位作为文件夹,后几位作为具体的对象名
head和master分支
head就是一个类似指针的概念,指向master,head就是master,指向dev,head就是dev,就是git branch
前面的*
号
简而言之head就是当前分支,当前分支是哪个分支,head就指向哪个分支。
➜ demo git:(master) ✗ git branch
b
* master
上面的hash值怎么来的?
sha1sum(这个算法能得到全球唯一的一个值)
例如:
➜ demo git:(master) ✗ printf git | sha1sum
输出git的sha1sum算法的值