从零开始使用git
- 了解 Git
- git创建本地仓库
- 初步理解git结构
- 版本回退
了解 Git
开发场景中,文档可能会经历若干版本的迭代。假如我们不进行版本管理,那么出现问题后想要回溯版本,就会
变得异常困难!
Git就是用来解决这个问题的:
- git可以管理电脑上任意格式的文档。
- git可以做到版本控制,可以记录文件内容变化,以便将来查阅特定版本修订情况的系统。
Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。(不得不说大佬就大佬,真滴厉害!)
git创建本地仓库
当我们想要将一个文件夹做为本地仓库时,可以使用:
git init
进行快速的初始化,当我们执行后会出现日志:
此时,我们的本地仓库就建立好了!
当我们创建好本地仓库时,该来路径下会产生一个文件.git
:
我们使用tree来看一下这个文件的文件结构:
后面我们会一一讲解。
本地仓库创建好之后,还需要进行一些配置。我们必须配置name email
,那么如何进行配置呢?
git config user.name "jlx"
git config user.email "123123@qq.com"
我们可以通过git config -l
查看一下配置项:
想要删除配置项可以使用
git config --unset user.name
git config --unset user.email
接下来我们来看一个选项--global
:
git config --global user.name "jlx"
git config --global user.email "123123@qq.com"
在一台主机下,我们可以配置多个本地仓库,每个仓库都会有对应的配置项。--global
就是声明一个全局的配置项,所有的本地仓库都可以进行访问。对应的删除:
git config --global --unset user.name
git config --global --unset user.email
初步理解git结构
我们现在我们的本地仓库创建一个文件:
这样创建了一个文件之后,我们并没有真正的对readme
进行了管理,这只是创建了一个文件!
注意:千万不能对.git
文件进行手动修改!必须通过指令来进行管理,否则会破坏git仓库
所以readme
这个区域也被称之为工作区。工作区就是我们进行编写代码,修改文件的地方:
只有我们使用git add filename
之后,才会进入git仓库进行管理。使用add之后会将文件放入stage(暂存区)。当我们进行对文件进行修改之后,使用git add filename
指令后,会将文件的新增/修改/删除信息放入暂存区(这里储存一个索引)。之后再通过git commit -m""
将暂存区的文件放入版本库中。
在版本库中还存在一个对象库objects
,当我们进行git add filename
之后,修改的工作区内容会写入对象库的一个新的git对象中。
我们创建三个文件来看:
来看git log
命令的效果:
此时就能看到历史commit的数据,这个提交id是哈希算法生成的一个大数,不会重复。
接下来我们再来了解一下git结构中的HEAD:
其指向了一个路径refs/heads/master
。我们打印一下这个内容:
这里存放的就是最新一次commit提交的信息。这样的序列号都会有对应的对象:
这个序列号组成是:2位文件夹名称 + 对象序列号。我们来看这个对象到底是怎样的:
这里看到还有一个tree对象,我们看看这是什么:
这里是之前我们提交过的文件,都有对应的对象。
如果我们想要查看暂存区中是否出现了新内容,可以使用git statu
查看是否工作区是否有被修改的文件。并且还可以通过git diff
可以查看工作区和仓库中的差异:
版本回退
接下来我们来了解git的核心功能:版本回退,本质是回退版本库的内容。
git存在三个部分:工作区,暂存区,版本库,都可以进行回退选项:
--soft
: 只回退版本库内容--mixed
:对暂存区和版本库进行版本回退(默认选项)--hard
:对暂存区和版本库以及工作区都进行版本回退(慎用 ,会导致工作区新内容丢失,直接丢失好几天写的代码可就坏了)
那么如何进行选择回退到哪一个版本呢,我们可以打印出日志来看:
此时可以看到每次的commit信息了,所以写出完善的commit信息是非常重要的!!!然后就可以通过序列号进行回退了
成功回退!当然如果后悔了,也可再次进行版本回退!只要我们的版本序列化存在就可以进行回退!
如果你不小心退出了,再次进入后发现之前的log信息不见了,不用担忧,可以通过git reflog
进行查看,并进行版本选择。如果如果序列号真的没有了,那么也就没有办法进行版本回退了!!! 必须要多加注意哦!!!
版本库版本回退的本质是master指向的改变!所以速度很快!