【Git】从零开始利用git --- git 的基本利用
https://i-blog.csdnimg.cn/direct/e72006d253024a0d92a6ce81e4b3efff.png哪怕是野火焚烧,哪怕是冰霜覆盖, 依然是志向不改,依然是信念不衰。 --- 《悟空传》---
了解 Git
开辟场景中,文档可能会经历多少版本的迭代。假如我们不进行版本管理,那么出现问题后想要回溯版本,就会
变得异常困难!
Git就是用来解决这个问题的:
[*]git可以管理电脑上任意格式的文档。
[*]git可以做到版本控制,可以纪录文件内容变化,以便未来查阅特定版本修订情况的系统。
Git最初是由Linux开辟者Linus用了仅仅两周时间纯C语言编写而成(两周时间包括测试),也就是现在为止最好用的分布式版本控制系统。(不得不说大佬就大佬,真滴厉害!)
git创建本地堆栈
当我们想要将一个文件夹做为本地堆栈时,可以利用:
git init
进行快速的初始化,当我们实行后会出现日志:https://i-blog.csdnimg.cn/direct/b9aa1e12661f457692cc911f1dce7a5c.png
此时,我们的本地堆栈就创建好了!
当我们创建好本地堆栈时,该来路径下会产生一个文件.git:https://i-blog.csdnimg.cn/direct/3b22595194c141baab139567f29fb7ec.png
我们利用tree来看一下这个文件的文件结构:
https://i-blog.csdnimg.cn/direct/7bf9b232a0f94fe18e7892a5c15aa3c1.png
背面我们会逐一讲授。
本地堆栈创建好之后,还需要进行一些设置。我们必须设置name email,那么如何进行设置呢?
git config user.name "jlx"
git config user.email "123123@qq.com"
我们可以通过git config -l 检察一下设置项:
https://i-blog.csdnimg.cn/direct/87da7ca2a1bf4861a73d53ea1f4ca917.png
想要删除设置项可以利用
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结构
我们如今我们的本地堆栈创建一个文件:
https://i-blog.csdnimg.cn/direct/20f261da809842b0827ab6abcfdc9a58.png
这样创建了一个文件之后,我们并没有真正的对readme进行了管理,这只是创建了一个文件!
注意:万万不能对.git文件进行手动修改!必须通过指令来进行管理,否则会粉碎git堆栈
以是readme这个地区也被称之为工作区。工作区就是我们进行编写代码,修改文件的地方:
https://i-blog.csdnimg.cn/direct/bc059e5ee3284d4ba6f383933b98bf69.png
只有我们利用git add filename之后,才会进入git堆栈进行管理。利用add之后会将文件放入stage(暂存区)。当我们进行对文件进行修改之后,利用git add filename指令后,会将文件的新增/修改/删除信息放入暂存区(这里储存一个索引)。之后再通过git commit -m""将暂存区的文件放入版本库中。
在版本库中还存在一个对象库objects,当我们进行git add filename之后,修改的工作区内容会写入对象库的一个新的git对象中。
https://i-blog.csdnimg.cn/direct/dcf4ce70f87e4f1ea36b7e812b6dc957.png
我们创建三个文件来看:
https://i-blog.csdnimg.cn/direct/ffb5b49ec4fa4e6c95f6e7cb75ba8599.png
来看git log下令的效果:
https://i-blog.csdnimg.cn/direct/f0ea77c2922c40b1853aac60ff15b99f.png
此时就能看到历史commit的数据,这个提交id是哈希算法生成的一个大数,不会重复。
接下来我们再来了解一下git结构中的HEAD:
https://i-blog.csdnimg.cn/direct/5484d14a488443b4ae39e502ae3b273e.png
其指向了一个路径refs/heads/master。我们打印一下这个内容:
https://i-blog.csdnimg.cn/direct/2a806c1d548249448ba2f6b49aa3d489.png
这里存放的就是最新一次commit提交的信息。这样的序列号都会有对应的对象:
https://i-blog.csdnimg.cn/direct/5917090114b344e182ce65d39d8ee611.png
这个序列号组成是:2位文件夹名称 + 对象序列号。我们来看这个对象到底是怎样的:
https://i-blog.csdnimg.cn/direct/107c820798da4375bec3ddc8e302ca3e.png
这里看到另有一个tree对象,我们看看这是什么:
https://i-blog.csdnimg.cn/direct/0f1949f355894399b6633b9293038539.png
这里是之前我们提交过的文件,都有对应的对象。
假如我们想要检察暂存区中是否出现了新内容,可以利用git statu检察是否工作区是否有被修改的文件。并且还可以通过git diff 可以检察工作区和堆栈中的差异:
https://i-blog.csdnimg.cn/direct/7f87b0f1d2da49bea860914c66d775db.png
版本回退
接下来我们来了解git的核心功能:版本回退,本质是回退版本库的内容。
git存在三个部门:工作区,暂存区,版本库,都可以进行回退选项:
[*]--soft: 只回退版本库内容
[*]--mixed:对暂存区和版本库进行版本回退(默认选项)
[*]--hard:对暂存区和版本库以及工作区都进行版本回退(慎用 ,会导致工作区新内容丢失,直接丢失好几天写的代码可就坏了)
那么如何进行选择回退到哪一个版本呢,我们可以打印出日志来看:
https://i-blog.csdnimg.cn/direct/c1f0d34c7eda4b83b2404a76758589f3.png
此时可以看到每次的commit信息了,以是写出完善的commit信息黑白常重要的!!!然后就可以通过序列号进行回退了https://i-blog.csdnimg.cn/direct/bb17cc646ef7464b8a118e6211396f1b.png
https://i-blog.csdnimg.cn/direct/0f9373f12c7544738d4d8ebd4152978c.png
成功回退!固然假如痛恨了,也可再次进行版本回退!只要我们的版本序列化存在就可以进行回退!
https://i-blog.csdnimg.cn/direct/90ab5e8c242f403c9f1f0d81d6495f39.png
假如你不小心退出了,再次进入后发现之前的log信息不见了,不消担忧,可以通过git reflog进行检察,并进行版本选择。假如假如序列号真的没有了,那么也就没有办法进行版本回退了!!! 必须要多加注意哦!!!
版本库版本回退的本质是master指向的改变!以是速度很快!
撤销修改
前面的文章我们讲授了git的核心功能版本管理,以及如何做到版本回退。那么假如我们在工作区写了很久的代码,越写越抽象,实在写不下去了,想要规复到上一个版本如何进行操纵呢?
起首git有三个地区:工作区,暂存区,版本库。那么对应的就会有不同的情况:
[*]情况一:工作区进行了修改,但是还没有进行add,暂存区是没有新代码的
[*]情况二:工作区进行了修改,并进行了add,但还没有进行commit。这时暂存区是有新代码,但是版本库并没有更新
[*]情况三:工作区进行了修改,并进行了add,也进行了commit。三个部门都有新代码
我们先来看看情况一,这种情况应该怎么做:
假如你写的很少,干脆直接办动删除新代码吧。固然当你写的代码许多了,进行手动删除很难制止出现BUG,以是直接办动删除肯定是不可行的。那么如何进行操纵呢?利用这个指令:
# 回退filename到最近add/commit的版本
git checkout -- filename
我们利用一下(注意中间的--)
https://i-blog.csdnimg.cn/direct/77dd570d4909426097aa99890965028f.png
再来看情况二 ,工作区和暂存区都存在新代码,这时如何进行回退呢。这里可以利用版本回退git reset 指令。
利用--hard指令可以回退工作区和暂存区的代码,或者利用--mixed回退暂存区和版本库的版本进行回退之后进行工作区回退 。
最后来看情况三,工作区和暂存区以及工作区都存在新代码。这里可以直接利用--hard选项进行版本回退到上一个版本HEAD。注意:这样实行的前提是commit之后没有进行push。也就是说远程堆栈没有被修改。
删除版本库中的文件
当我们工作区的文件都添加到了版本库中后,假如我们想要删除版本库中对应的文件呢?
这时我们直接对工作区进行修改,然后add添加修改的内容。在进行commit提交即可,这样就完成了修改。
同样也有一个简化的指令:
git rm filename
这个指令可以直接删除工作区和暂存区的文件!不在需要多步的操纵了!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]