深入理解git原理

1:git工作模式
在这里插入图片描述
基本步骤:
1.workspace 本地工作空间add命令 提交到本地缓存
2、localcache本地缓存commit命令提交到本地仓库
3、localRepository本地仓库push命令提交到远程仓库
拉取步骤:
clone 克隆到本地仓库
checkout命令切换分支

git初始化

安装-----Google it
为每一台电脑配置身份信息
$ git config --global user.name “Your Name”
$ git config --global user.email “email@example.com”
把某个目录变成可以让git管理到的目录(创建版本库)
git init命令

git基本命令

把内容输入到一个文件
echo “xxxx” > xxxx
把工作空间的某个文件添加到本地cache
git add xxxx
把工作空间的所有内容添加到本地cache
git add -A
把本地cache当中的某个文件提交到本地库
git commit -m “xxxx”
把本地cache全部提交到本地仓库
git commit -am “xxxx”
cache ---->work file恢复一个文件 file1 file2 恢复两个文件 .恢复所有文件
git checkout readme.txt
git状态查询
git status
查看不同的地方 默认查看工作区和cache
git diff --cached 比较cache和Repository
git diff HEAD 工作区和最新的Resository
git diff commit-id 工作区和制定的repository
git diff --cached commit-id
git diff --commit-id commit-id
git diff
reset 顾名思义 (HEAD~100)
git reset HEAD^
git的日志
git log git log --pretty=oneline
oh my pretty pretty boy i love you
git reflog 查看历史命令
git rm --cached file_path
git rm
git mv
远程仓库的克隆到本地库
git clone
关联远程仓库
git remote add
推送到远程仓库
git push
拉取远程仓库的内容
git pull
查看当前分支 -a查看所有分支 -av 查看所有分支的信息 -avv 查看所有分支的信息和关系
git branch
创建一个分支 基于当前分支创建分支
git branch xxx
基于oldType创建分支
git branch newBranch oldType
切换分支
git checkout 分支的名字
删除分支
git branch -d xxx
查看文件内容
git cat-file -p commitid
查看对象类型 blob commit tree
git cat-file -t commitid

git分支概念详解

查看分支:
在这里插入图片描述
创建分支的四种方式:
1、基于当前分支创建分支 (git 默认方式)
在这里插入图片描述
2、基于远程分支创建分支

test3基于远程分支remotes/origin/2.0而创建?
怎么证明呢?
如下图可以看见test3对应的commit ID与remotes/origin/2.0是一模一样的
在这里插入图片描述

3、基于新分支创建分支
在这里插入图片描述
4、基于提交创建分支

得出结论:其实都是基于commit创建分支(后面原理会重点分析说明
合并分支
一定要切换到被合并的分支上去合并
比如说A要合并A1
那么先要切换到A1,然后在A1上面执行git merge A

git原理解析

git 核心就是基于指针与元数据拼接完成 文件的组合

git中有四个对象
1、Blob 对象
用于存储的是文件内容,压缩的
文件名字是根据内容算出的一个hash值
2、tree对象
指正指向blob对象与子tree对象
3、commit对象
存放作者提交者注释
指向一个 tree 的指针
4、tag对象(相当于分支)
怎么证明有这几个对象呢?
直接上代码,不多解释:
1、证明Blob 对象:
a:执行git init会在文件夹中生成一个.git文件(需要设置显示隐藏文件)
b:echo “git1” > git1.txt 将git1写入到git1.txt文件夹中

在这里插入图片描述
c:执行git add -A 将文件提交到本地缓存会生成一个7f文件夹(里面储存由hach码组成的文件,git压缩并储存了我们提交git1.txt文件的内容)
在这里插入图片描述
D:证明git储存的文件类型,与内容!
在这里插入图片描述
2:证明 tree 与 commit对象
1)执行commit命令 git又会帮我们生成 commit 与 tree的文件夹
在这里插入图片描述
2)证明tree 与 commit对象的存在
在这里插入图片描述
C:从下图可以发现,commit对象内容指向tree对象的指针ID(还有作者信息以及提交的注释) tree对象指正的ID又指向blob对象的ID(由于这里没有子文件夹所以没有子Tree读者可以自己尝试
在这里插入图片描述
在这里插入图片描述

总结

上图可以看出
作者信息+注释信息+文件结构(子tree)+文件内容 不就构成了我们完整的文件?
所以得出:git是将文件分成多个元数据组成。我们平时操作,也只是操作commit
在这里插入图片描述
在这里插入图片描述
其实git只是操作指针,所以能做到高效率。多分支。。切换分支,仅仅只是改变master文件中的指针ID而已。让它指向另一个commid而已。。这也是与svn最大的不同。(ps:总结得不是很好,通过以上的示例希望能让读者明白一些吧)

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐