Git管理详解

1 GIT 概括

1.1 GIT 介绍

在代码开发过程中,往往需要对源码进行多次的修改操作,这样一来同一份代码就产生了多个版本,在开发过

程中通常需要对这些多个版本代码进行管理,以便于在需要时进行 代码回滚、多版本间比较、多人协作开

发、代码分支、分支合并 等操作。

这样的需求大量的存在,而随着软件越来越复杂、代码越来越多、参与开发者越来越多,版本管理也变的越来

越有难度,此时就需要专业的软件来对版本进行管理,这个过程就称之为版本控制,实现版本控制的软件就称

之为版本控制软件

1.2 git历史

Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编

写代码,那Linux的代码是如何管理的呢?

在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方

式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统

吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一

些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区

的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,

BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习

气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发

现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是!一个月之内,Linux系统的源码已经由

Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git

存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git

了。

2 本地版本控制

2.1 初始化仓库

将每一个管理的文件夹看成workspace(工作空间,相当于idea管理的一个项目)

用法:

git init

创建了一个当前工作空间的本地库.

在这里插入图片描述

idea中有git插件,一般不需要执行git init

在这里插入图片描述

2.2 配置开发人员信息

在多人协作中,每人负责的内容不一样,为了方便管理大家上传,修改,删除的操作步骤和历史版本,一般每个用户都会配置自己的开发人员信息.

用法:

用户级别的配置

git config user.name [xiao]
git config user.email **@qq.com]

全局级别的配置

git config --global user.name 
git config --global user.email

2.3 添加暂存区

git仓库模型,理论基础

在这里插入图片描述

在工作区修改添加文件,做项目开发,大量文件代码发生变动.

可以将变动的文件添加到暂存区.

在这里插入图片描述

用法:

git add [文件]

文件必须是工作区的文件.可以使用* 代表所有文件.

idea操作add

在这里插入图片描述

idea发现某些项目是git仓库的话,在创建项目代码时,修改项目代码时,都会提示

是否自动add.

在这里插入图片描述

2.4 查看工作区暂存区状态

观察工作空间的文件变动的情况

用法:

git status

idea用法:暂无

2.5 提交到版本库

执行git命令,将暂存区的内容,添加到版本库的分支区.

一旦添加到分支区,当前的数据,永不丢失.

用法:

git commit -m "描述信息"

idea操作

在这里插入图片描述

在这里插入图片描述

2.6 查看版本

commit提交的版本,每一个版本都默认生成一个唯一字符串作为版本号存在.

可以通过log命令,查看当前版本库中信息.

用法:

git log

在这里插入图片描述

idea log功能更强大

在这里插入图片描述

2.7 版本的回滚

在commit多次提交的version版本中,我们可以从一个当前版本跳转回滚到另一个版本.

用法

git reset [--hard|soft|mixed] version版本号

选项是有默认值的.–mixed.

  • hard 表示直接回滚到对应version的版本,所有不同文件,不同内容丢失
  • soft 回退到对应版本,但是不同的内容保存在暂存区
  • mixed回退到对应版本,但是不同的内容保存在工作区

idea的操作

在这里插入图片描述

在这里插入图片描述

2.8 打标签

一旦选择回滚,在git log命令中,就看不到后续的版本了.

如果想要回滚回去(逻辑上讲,不会出现这种操作)

idea 操作 对比版本区别

在这里插入图片描述

用法

git tag 标签名 版本号

2.10 查看操作版本日志

如果在当前版本之后有很多版本(因为回退),想查看后面版本 git log做不到

可以使用git reflog

用法:

git reflog

3 分支管理

3.1 分支的概念

分支,为了避免同一个仓库,多人协作开发时,重复,冗余解决文件冲突问题,引出的一个git特性-分支.

3.2 创建分支

默认情况下,每个git仓库有一个默认分支 master.

用法:

git branch 新分支名称

在git仓库分支区就会多出一个分支区名字 新分支名字.和执行命令时所在的分支,共享同一个版本作为 base version

在这里插入图片描述

在这里插入图片描述

3.3 切换分支

注意: 新学习git的时候,切换分支之前,先提交版本,不在工作区和暂存区有一些新变化的时候切换.

用法:

git checkout 目标分支名称

在这里插入图片描述

通过上述两个命令,创建分支,切换分支,就可以在不同分支.

在master和branch1中分别提交一个版本,最终分支的结构

在这里插入图片描述

3.4 查看分支

在git中可以通过命令查看当前git仓库的所有分支,和正在使用的分支.

用法:

git branch

在这里插入图片描述

3.5 分支合并

分支开发完毕,可以将分支进行合并,所有版本合并到一起

执行合并命令,分清楚谁合并到谁

用法:

git merge 目标分支

目标分支的意思并不是合并到的分支,而是要拉过来合并的那个分支.

执行merge命令所在分支,是合并到的分支.

在这里插入图片描述

在master执行merge合并,最终版本 ,分支的关系

在这里插入图片描述

如果继续在branch1中合并master,分支结构图

在这里插入图片描述

3.6 合并分支解决冲突(重点)

冲突一定是出现在以下条件里的:

  • 文件相同(两个,多个分支同时提交的版本中有文件)
  • 行冲突

同时满足上述2个条件,就需要在merge的时候解决冲突问题

解决冲突有2中

  1. git命令解决
  2. idea

用法:

git merge branch1

由于冲突存在.

合并暂停,git会在冲突的文件中,给标记对应冲突内容,需要人为的手动调整.

在这里插入图片描述

调整完成后,合并继续

git add *
git merge --continue

合并后,git跳转到一个日志文件,记录合并的过程

在这里插入图片描述

涉及到linux命令操作.从文件中退出

  1. ESC
  2. 直接在键盘输入 :wq
  3. 回车

推荐使用idea,更智能,更方便.

在这里插入图片描述

一旦出现冲突,idea会自动提出解决冲突的方案

在这里插入图片描述

三个选择方案前两种,保留当前分支内容,或保留目标分支内容

第三种方案 手动调整.

在这里插入图片描述

4 远程仓库

4.1 远程仓库概念

团队做开发的时候,每个人都管理自己的本地版本.

如果是协作开发,应该是每人负责不同的项目功能,最终合并到一起使用.

多个git仓库的管理工作,涉及到一个概念–远程仓库

在这里插入图片描述

4.2 谁是远程仓库

git中提到去中心化的概念.

  • 中心化结构

svn典型软件

每个人只管理自己的内容.

最终都在中心服务器进行代码的整理.

在这里插入图片描述

存在缺点

  1. 依赖性太强
  2. 单点故障
  • 去中心化结构

git典型的软件之一.(最终使用的感受,还是中心化)

在这里插入图片描述

git存在中心托管仓库的概念,实际上是不需要个人电脑实现远程仓库的角色的.

github(国内慢,资源非常多)

gitee(国内的github)

gitlab 公司内部服务器(代码不开源)

4.3 gitee使用远程仓库

4.3.1 注册账号(略)

4.3.2 创建空仓库

选择新建仓库

在这里插入图片描述

填写仓库信息

在这里插入图片描述

在gitee中默认创建的仓库是私有仓库(创建的用户才能使用)

在这里插入图片描述

准备好托管远程仓库,内容是空的.

4.3.3 远程仓库和本地做关联

本地创建一个项目

在项目中准备好git本地仓库,可以和远程仓库做关联,然后 pull/push了.

用法:

git remote 

查看本地仓库关联的远程仓库.

在这里插入图片描述

git remote add 远程仓库名称 远程仓库git地址
git remote add abc https://gitee.com/xiaolao
shi2021/project-01.git

4.3.4 push/pull

push命令,将本地分支版本推送到远程仓库.push如果有冲突,需要先解决冲突(pull)

在远程仓库中也有分支

用法:

git push 远程仓库的名称 本地分支:远程分支

我要将,本地分支 推送到abc这个远程仓库的远程分支

git push abc master:main

如果多人协作,还有别人在main远程分支推送代码(如何在本地模拟多人协作连接同一个远程分支)

git pull 远程仓库名称 远程分支名称
git pull abc main

执行操作的时候,会先从远程中心 拉取main分支的版本,在和本地当前所在分支做merge合并.

5 总结思维导图

git remote add 远程仓库名称 远程仓库git地址
git remote add abc https://gitee.com/xiaolao
shi2021/project-01.git

4.3.4 push/pull

push命令,将本地分支版本推送到远程仓库.push如果有冲突,需要先解决冲突(pull)

在远程仓库中也有分支

用法:

git push 远程仓库的名称 本地分支:远程分支

我要将,本地分支 推送到abc这个远程仓库的远程分支

git push abc master:main

如果多人协作,还有别人在main远程分支推送代码(如何在本地模拟多人协作连接同一个远程分支)

git pull 远程仓库名称 远程分支名称
git pull abc main

执行操作的时候,会先从远程中心 拉取main分支的版本,在和本地当前所在分支做merge合并.

5 总结思维导图

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值