上一章简单的介绍了一些常用的Git命令,这一章主要是深入了解一下Git的稍微高级的一些知识和指令。
8.首先我们先来通过查看Git目录里面的文件来深入了解一下Git版本控制的构造。
查看HEAD可以知道当前所在的分支。
在config文件里面存储着Git里面的一些配置信息,不同的Git分支里面内容不同。
在refs文件夹里面包含heads和tags。hears里面有不同的分支的名字;tags里面主要就是一些里程碑的内容,也就是通常所说的打的一个tag。
9. objects文件夹里面存放的是Git里面核心的文件内容,主要是Git版本控制管理的三个对象,主要关系就是commit包含tree,tree里面包含blob。tree的话就是一个文件夹,blob就是文件的内容。 前面文件夹的名称加上文件里面的名称,通过命令行可以查看文件的类型和文件内容。 git cat-file -t md5值 查看类型
git cat-file -p md5值 查看内容
git branch -av 查看分支
git status 查看文件的状态
10. 暂存区,工作区,head所含文件之间差异比较 git diff --cached #暂存区和head所含文件的差异比较
git diff #工作区和暂存区比较差异 全部文件
git diff -- readme.txt #工作区和暂存区比较差异 个别文件
git diff HEAD HEAD~2 #比较不同的head
git diff temp master #比较俩个分支的差异
git diff temp master -- index.html #比较俩个分支同一文件的差异
11.分离头指针 当我们直接Check出来某个commit的时候,这个HEAD头指针不属于现在全部的branch版本的话,就是分离头指针。当我们在代码中做尝试性变更的时候会遇到这个场景,比如说只是想尝试性的写一些功能,但是又不想保存到控制版本里面的时候。所以我们在使用分离头指针的时候需要注意的是:commit提交一定要跟branch绑定在一起才会生效。git checkout c6693 #分离头指针
git branch write 2f87f57 #保存分离头指针
在暂存区有时候写完的代码不想要了,需要全部恢复到工作区的时候。
git reset HEAD #把暂存区的全部内容恢复到工作区
git reset HEAD 文件名 #把暂存区的部分内容恢复到工作区
git reset --hard M5值 #恢复到指定的commit,取消最近的提交 这个操作有点危险哟。
12. commit的一些高级指令
- 修改commit的内容
`git commit --amend #修改最新的commit` `git rebase -i c6693435 #修改以前的commit的到时候需要找到他的父亲然后修改` ![修改最新的commit](https://img-blog.csdnimg.cn/20190921191027777.png) ![变更老的commit成功](https://img-blog.csdnimg.cn/20190921191247836.png) ![修改以前的commit,这里需要将3efc626前面的pick改成r](https://img-blog.csdnimg.cn/20190921191436696.png) - 把多个连续的commit合成一个commit `git rebase -i c669343 `
- 把不连续的commit合成一个commit `git rebase -i c669343 `
13.将Git仓库备份到本地
说了这么多,没有远程仓储怎么行,下面就先让我们在本地初始化一个本地的Git仓库。 Git常用的传输协议
有哑协议 /path/to/repo.git
智能协议 file:///path/to/repo.git
http/https协议 http://git-server.com:port/path/to/repo.git https://git-server.com:port/path/to/repo.git
ssh协议 user@git-server.com:path/to/repo.git 最常用
哑协议传输进度是不可见的;智能协议传输可见 并且智能协议比哑协议传输速度快。git clone --bare 地址 名称xx.git
git clone --bare /e/BLOG/git/learn_git/.git ya.git
git clone --bare file:///e/BLOG/git/learn_git/.git zhineng.git
git remote add zhineng file///e/BLOG/tank/zhineng.git #同步到远端
git push zhineng