git 流程:
git基本原理
工作区、暂存区、本地仓库
1、在执行git init 后创建git本地仓库,生成 .get 文件:
hooks
info
logs
objects
refs
.COMMIT_EDITMSG.awp
COMMIT_EDITMSG
config
description
HEAD
index
ORIG_HEAD
packed-refs
2、执行git add . 之后,会在objects文件中生产文件:
git cat-file -t a9aae1 查看object文件的类型
git cat-file -p a9aae1 查看object文件中的内容
当在工作区有添加文件或修改文件时,执行git add xxx 后,添加和修改的文件通过压缩后形成快照保存到objects中(通过git cat-file -p a9aae1 查看文件可发现内容为添加和修改文件的完整信息(副本))
objects 中的文件名是通过 对<文件内容+文件类型> 进行hash算法(SHA1)得到,前两位作为第一层目录(a9),剩下的作为第二层的文件名(aae118b1d9…), 所以当工作区的两个文件的文件内容+文件类型相同时,在执行git add . 后在object生成的文件是相同的,因此指向同一个objects文件
hash算法:把任意长度的输入通过散列算法变换成固定长度的输出:
类型: MD5(128bit) 、SHA1(160bit)、SHA25(256bit)、 SHA512(512bit)
echo "文件类型 内容长度\0内容" | shasum // hash算法得到object文件名
echo “blob 10\0hello git” | shasum
git ls-files // 查看index文件中的内容(即暂存区的文件目录)
git ls-files -s // 查看index文件中的详细内容
3、git commit -m “xxx”
回退 git reset
git reset --soft HEAD~1 回退HEAD(本地仓库),index(暂存区)和工作区不变
git reset --mixed HEAD~1 回退HEAD(本地仓库)和index(暂存区),工作区不变
git reset --hard HEAD~1 回退HEAD(本地仓库)、index(暂存区)、工作区
git reset --hard origin/master 将本地的HEAD、index、工作区回退到和远程的master分支(也可以是其他远程分支)一样
分支管理
git branch // 查看分支
git branch huzw001 // 创建分支huzw001
git checkout huzw001 // 切换到分支huzw001
git checkout -b huzw001 // 创建分支并切换到huzw001
git branch - d huzw001 // 删除分支huzw001
git merge huzw001 // 将分支huzw001合并到master上
git原理
git对象、blob对象、tree对象、commit对象、tag对象