Git
Git
什么是Git
Git是一个开源的、分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
Git易于学习,占地面积小,性能极快,它具有廉价的本地库,方便的暂存区域和多个工作流分支
简介
版本控制
什么是版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
版本控制最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换
为什么需要分布式版本控制
个人开发过渡到团队合作
相对于集中式版本控制,分布式版本控制在断网的情况下也可以进行开发(因为版本控制是在本地进行的),每个客户端保存的也都是整个完整的项目(包含历史记录)
工作机制
当我们的代码在工作区和暂存区时,管理员是看不到我们的代码的,我们可以对这时的代码进行删除或者修改操作,当我们提交到本地库后,git会帮我们生成一个历史版本,此时的代码是无法删除和修改的
代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库
- 局域网远程库:GitLab
- 互联网远程库:GitHub、Gitee
Git的常用命令
初用Git要先设置用户签名和用户的邮箱使用命令
1 | git config --global user.name XXX |
在我们的本地C盘用户目录下我们可以看到一个文件 .gitconfig
初始化本地库
git init
我们创建一个文件夹后,若先用git进行版本控制首先要进行git初始化
进入该文件夹后打开git bash 然后输入命令 git init
会在我们的文件夹下生成
查询本地库状态
git status
其中输出的日志表示为:在master分支下,并没有可提交的文件,但是有一个未被追踪的文件(hello.txt),现在没有任何除了违背追踪的文件要被添加提交(使用“git add”去追踪)
此处的add即为从工作区添加到暂存区,表示为暂存区没有文件要被提交
添加暂存区
git add
我们将 hello.txt添加到暂存区,警告可忽视
这时我们在看本地库的状态
我们可以发现原先未被追踪的hello.txt变成了绿色,这里表示为暂存区追踪到了hello.txt,且 git有提示,可以使用“git rm –cached 文件名”去进行暂存区删除
文件提交本地库
git commit -m “日志信息” 文件名
左红框为版本号,右红框为我们输入的日志信息
这时我们再去查看状态,相比较于之前已经没有了 No commits yet 说明我们已经提交过了。下面的一句nothing to commit ,working tree clean意思是没有东西修改过,工作树是空的
我们对hello.txt文件进行内容的修改然后再次提交后,添加了其他日志信息,那怎么去看提交的日志信息呢?
git reflog
如何去细致的看日志信息呢
git log
在这里我们可以看到完整版的版本号,和提交者的用户签名还有邮箱签名 以及提交时间和提交日志
版本穿梭
git reset –hard 版本号
日志中可以看到这个操作
倘若我们回到最初的hello.txt中,此时
倘若我们回到 最新的 hello.txt中
我们还可以在初始化时生成的git文件中查询到当前处于那个分支的哪个版本下
打开文件夹打开HEAD我们可以发现
再打开HEAD 文件中的路径我们可以发现
我们当前处于此版本号版本下 我们去查看得知正是该版本
分支
什么是分支
可以这么理解分支,本人呢学习忍术多年,终于有一天学会了禁术——多重影分身之术,我非常开心,可以让这么多分身去学其他的技术,陆陆续续的有影分身(分支)回到了我本来的身体中,他学会了RabbitMQ,所以我也学会了RabbitMQ,还有的影分身学会了Zookeeper,学会了Redis。。。。。。。。所以我都学会了,但是回来一个影分身告诉我他没学会编译原理(因为是真特么难),我摸摸头告诉他没事。对我个人而言并不影响我自己继续生活学习,但同时我学会了这么多知识,这就是分支
分支可以使得各个部门同时进行开发各个组件,而不影响主业务的开发
分支操作
查看分支
git branch -v
当前分支为 master 版本为ocd62f3 日志为 是真的帅
创建分支
git branch 分支名
我们不难发现,创建的分支除了分支名和当前分支不一样,版本号和日志都一样
切换分支
git checkout 分支名
该命令行中日志输出为已切换到分支hot-fix,当查看节点时hot-fix节点变为绿色,也说明当前分支为hot-fix
分支合并
git merge 分支名
表示为将指定的分支与当前分支合并,以两个列表(列表中的元素相同但所处对应位置不同也不算等价列表)表示两个节点的不同文件,倘若 本节点的改文件包含于或被包含于另一个文件,则这两个文件就可以合并成功,该节点的文件内容
分支合并冲突
分支合并冲突是一件非常有意思的事情,当我们合并时 节点A 的文件1相较于原文件有了至少一出修改(已提交),正好节点B对文件1也进行了修改并与节点A修改了同一处位置,但内容不同,这时二者合并时就会出现问题?
同时修改的那基础到底如何合并,是保留A节点此处内容还是保留B节点此处内容。当合并时直接报错,出现如下图的内容
这种报错即为 分支合并冲突
当出现分支合并冲突时,我们需要对该文件进行修改,确保保留的是哪个分支上的内容
Git团队协作机制
团队内协作
团队协作的大致流程:
岳不群是华山派掌门人,他创建了华山剑法,推送(git push)到托管中心,恰好令狐冲是他的徒弟,此时的令狐冲并不会剑法(本地无源码),需要学习剑法,
所以需要获取那本书(git clone),令狐冲天资聪慧是练武奇才,不仅学会了华山剑法,还在基础上创建了新的招式,于是也加入到华山剑法中返回(git push)给托管中心,岳不群大悦(本地有源文件),于是将托管中心的书拿过来(pull)看了看,也学习了一下新招式
跨团队协作
跨团队协作流程:
岳不群认为自己的华山剑法不够强劲,所以去找其他派的人来帮忙升级斧正一下,于是找到了日月教派CEO东方不败,东方不败同意后
①东方不败在岳不群的远程库中把华山剑法fork到了自己的远程库中,然后
②放到本地,一顿改正后,华山剑法改为了辟邪剑法,然后
③放到自己的远程库,
④又由自己的远程库向岳不群的远程库提出pull request
⑤岳不群在看完辟邪剑法后感觉非常的不错,质量很高(用法除外)
⑥将原先的华山剑法和现在的辟邪剑法进行合并merge
7 岳不群大悦pro,赶紧把远程库中的辟邪剑法拉到自己的本地库中,顺便问了问令狐冲要不要一起练
Github实战
远程仓库操作
创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
本地库的分支推送
git push 链接(别名) 分支
远程库的分支拉取
git pull 链接(别名) 分支
远程库的克隆
git clone 链接(别名)
团队内协作
邀请其他用户一起完成项目
首先进入github 首页,然后进入设置(setting),而后点进仓库(Repositories),然后点入
复制下来然后将连接发给他,好有在接受连接后直接进入链接,同意加入,即可称为团队内成员