git
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 ,避免碰撞.