git

详细: git-book

object

一个对象 = 一个文件 ; 存于 .git/objects 文件夹内
类似 xy/ijk… 文件, sha1= xyijk…

git add -> blob对象(原文件经过zlib压缩)
git commit -> 先产生tree对象, 把tree对象sha1及父commit对象sha1记录到新的commit对象中
tree对象 sha1 of blob obj1 , sha1 of blob obj2 , ...
commit对象 parent: sha1 of commit obj ;tree: sha1 of tree obj

git tag -> tag对象 sha1 of commit

指针 | 快照

sha1
.git/refs/heads/<分支> -> commit obj sha1
.git/refs/tags/<tag> -> tag sha1
.git/HEAD -> <分支名|sha1>

.git/refs/remote/<remoteName>/<分支>
.git/refs/remote/<remoteName>/HEAD

常用命令

git init

git clone

git pull, git fetch

git push

git add

git commit

git branch ;git checkout -b

git checkout

git merge [-ff] –fast-forward

git -C p/a/t/h push ….. 指定目录

git reset

git rebase

..

最后

原则: 只增不删(保持痕迹;防止误删) v.s. 删除多余分支/commit (保持整洁!)

sha1碰撞问题? 方法: 改变隐藏的数据(无关的,不透明的) ->改变sha1 ,避免碰撞.