git实战-多分支开发-2022新项目
现在开发中大多数公司中都在使用Git这个代码版本管理工具,几乎可以说是已经成为标配,刚入职不久的这家新公司也不例外。
去公司没多久,开始搭建项目,然后创建开发分支,有多少个后端人员就创建多少个开发分支,每个人都在自己的分支上进行开发。
如上图所示:我们假设有四个开发人员鸣人、佐助、雏田、小樱,首先创建一个主要的开发分支 bigstuff-release-V1,然后根据 bigstuff-release-V1这个分支在创建
四个分支分别给四个开发人员使用,以每个人的名字缩写作为分支的后缀。每个人的代码都提交到自己的分支上面,并且是以 bigstuff-release-V1这个分支为主线,部署
代码的时候,也是部署在这个分支上面。日常开发的时候,作为普通的开发人员鸣人,需要对git操作的事情就三件:.a.提交本地代码到自己的开发分支bigstuff-release-V1-mr
上面;.b.将bigstuff-release-V1分支上面的代码合并到自己的分支bigstuff-release-V1-mr上面;.c.将bigstuff-release-V1-mr分支上面的代码合并到bigstuff-release-V1-mr分支上,
下面分别讲解。
操作一:提交本地代码到自己的开发分支bigstuff-release-V1-mr
首先需要拉取分支上的代码,方式可以使用命令行,使用git clone 代码地址 的方式或者使用IDEA的方式进行拉取,看个人的喜好。本人是使用IDEA的方式进行拉取,如果
使用IDEA打开某个项目时,没有显示VCS这个菜单栏,则可以新建一个空的项目,这个菜单就会显示出来,然后按照下面的操作即可。第一次拉取一般需要输入git的账号和密码。
添加Git代码的地址,选择好对应的目录即可。
拉取代码后,IDEA右下角会显示当前对应的分支版本,如下图所示(只是举例,真实开发环境为内网,不让截图)
拉取代码后,下一步操作就是切换到自己的分支,使用命令行操作或者IDEA操作都可以,看个人喜好,本人是使用IDEA操作.
拉取鸣人自己分支bigstuff-release-V1-mr上最新代码的操作方式如下,
需要选择一个分支,然后拉取代码.
提交代码的方式方式如下,在IDEA的右上角有一个打钩的图标,点击它即可,同样,使用命令行操作也可以,看个人喜好。
会显示如下信息,让自己选择需要提交的文件,不同的IDEA显示方式会不一样。这里需要注意,在选择需要提交的文件时,不要提交一些没用的文件,
如IDEA配置文件iml。提交信息是一定要添加的,这是个好习惯,写一个简单的描述这次提交的代码做了什么事情,然后点击提交即可。
最后一步是push代码,即是真正的提交自己本地的代码到远程分支上面,操作方式如下:
首先选择对应的分支,不要选错了,提交到别人的分支上面去了就尴尬了;其次是选择需要提交的内容;最后点击push即可。至此在自己的分支上的所有操作介绍完毕。
操作二:将bigstuff-release-V1分支上面的代码合并到自己的分支bigstuff-release-V1-mr上面.
开发中需要经常进行的一个操作就是将主要开发分支上bigstuff-release-V1上的代码同步到自己的开发分支上,因为别人可能会对代码进行修改,
同步的方式为使用合并来进行。这种合并方式一般是在本地进行,因为可能会存在代码冲突,冲突需要在本地解决。内网开发不能截图,只有文字说明。
操作钱需要确保自己本地修改的代码已经提交或者是已经备份,避免代码出现问题后自己的修改记录消失。
操作方式为:(1)切换到主开发分支bigstuff-release-V1,切换方式和拉取代码时的切换方式一样,然后拉取主开发分支的最新代码,因为别人可能有代码提交。
(2)将分支切换为自己的开发分支bigstuff-release-V1-mr,执行合并操作。本人是使用命令来进行合并,打开项目的根目录,打开git操作窗口,执行命令
git merge bigstuff-release-V1 意思就是将bigstuff-release-V1分支的代码合并到bigstuff-release-V1-mr分支。如果不想合并,可以撤销合并操作。
(3)这时候IDEA右下角会显示当前的状态为mergeing合并中,如果没有代码冲突,则直接按照操作一的方式来提交代码即可。注意提交记录中会包含bigstuff-release-V1
分支上之前已经提交的记录,不用管它一起提交。
(4)解决冲突。很多情况下可能都会存在冲突的情况,这时候就需要我们手动去解决冲突。存在冲突的文件会显示为红色,可以查询单个冲突文件的详细对比信息,
如是什么地方冲突,然后就是怎么解决。自己一般的解决方式为接受其他人的文件,然后在将自己在文件上的改动手动加上去。
(5)解决冲突后编译一下所有的代码,确保可以正常编译后,再次提交代码,提交方式同操作一中的一样,还是全部记录都进行push。这样就将远程主要的开发分支
的最新代码合并到自己的开发分支上。
參考博文
https://www.cnblogs.com/linjiqin/p/7756164.html
撤销合并代码的操作
https://www.cnblogs.com/wangkongming/p/4164732.html
操作三:将bigstuff-release-V1-mr分支上面的代码合并到bigstuff-release-V1分支上
这一步操作可以在git的后台管理网站中进行,可是需要注意的一点是发起合并请求时,不能存在冲突,如果存在就需要取消合并。以下用gitee上的合并请求说明.
创建新的合并请求,需要选择源分支,然后选择目标分支,意思就是将源分支上面的代码合并到目标分支上。这里的源分支是bigstuff-release-V1-mr分支,
目标分支是bigstuff-release-V1 ,记得填写注释信息和审核人信息。发起合并操作后,等待审核人审核,通过后就自动进行合并了。完成这一步后所有的
操作全部完成。
总结:上面这三步操作基本上包含了在项目中使用Git操作代码的常规方式,学会后就可以应对常规的开发工作。采用这种方式的缺点是,合并代码的
时候会比较麻烦,每一次别人代码有改动都需要进行合并。优点是操作比较规范,每个人基本上都只操作自己的分支,合并代码和解决冲突都是在自己的分
支上进行,这样相对来说也比较好解决冲突问题。不去直接操作主要的开发分支,让主要的开发分支的代码保持是最新的,别人想获取最新代码直接做同样
的操作即可, 减少出错的可能性。如果各位有更好的意见,欢迎留言说明。
git实战-多分支开发-2022新项目的更多相关文章
- 项目开发中Maven的单向依赖-2022新项目
一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...
- mybatis-拦截器实际应用-替换表名-2022新项目
一.业务场景 考虑到新项目中部分与业务数据相关的表在后期数据量会比较大,架构师在最开始设计项目中与业务数据相关的表时,就已经考虑使用分表来 进行处理,给业务数据相关的每张表都添加统一批次的后缀,查询这 ...
- 无法访问mybatis.dto.StudengInVO-使用maven编译报错-2022新项目
一.问题由来 最近一次拉代码后,合并代码然后进行编译时出现一个问题,使用maven在进行编译的时候报一个错,无法访问mybatis.dto.StudengInVO. 突然出现这个错误让自己感觉很奇怪, ...
- Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目
一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...
- git 在某个分支下创建新分支
首先要强调一个观念,那就是在某个分支A下创建新的分支B,是指使用A分支下的代码,并不是A/B这样的层级结构. 比如,我想要在非主分支dev 下面创建子分支dev_dev >>>1.创 ...
- Java异步记录日志-2022新项目
一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...
- redis缓存恢复-2022新项目
一.业务场景 Web项目开发中,为了加快数据处理的的效率,大量的使用了各种缓存,缓存技术主要使用的是redis.导致出现的小小的 问题是对redis缓存形成了一个比较强的依赖,并且有的数据暂时是没有同 ...
- 程序包 applets.user.service.UserService 不存在-2022新项目
一.问题由来 接上一篇文章使用maven进行打包时报中文乱码错误,经过多次尝试后最终解决问题,显示出真正的错误信息如下: 程序包 applets.user.service.UserService 不存 ...
- postgresql使用group by进行数据去重-2022新项目
一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...
随机推荐
- H5新增API
H5新增API 选择器 querySelector()和querySelectorAll(),参数都是css选择器,前者返回符合条件的第一个匹配的元素,如果没有则返回Null,后者返回符合筛选条件的所 ...
- Json学习笔记、思维导图
- Py的A+B
程序会读入两行,每行都是一个数字,输出这两个数字的和 输入格式: 两行文字,每行都是一个数字 输出格式: 一行数字 输入样例: 18 21 输出样例: 39 代码: a = input() b = i ...
- vue简单的父子组件之间传值
todo-list为例子: 代码: 父传子--------------属性 v-bind 子传父--------------$emit <!DOCTYPE html> <html ...
- 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...
- Spring5-IOC容器实现方式
spring提供了两个接口实现IOC容器 (1)BeanFactory:IOC容器基本实现,是Spring内部使用的接口,不提倡开发人员使用 特点:加载配置文件时侯不会创建对象,在获取对象时才会创建对 ...
- Go xmas2020 学习笔记 04、Strings
04-Strings.unicode.utf-8.类型描述符.go 字符串在内存中的存储. Strings. String structure. String functions. Practice
- 安卓记账本开发学习day2
今天遇到了xml文件报错,Wrong orientation? No orientation specified, and the default is horizontal, yet this la ...
- vue滚动分页加载
做了一个项目,要求将后台数据滚动加载. 滚动加载必须要求后台传的接口中由pageSize和pageIndex两个参数,来判断每次传数据的条数和数据的页码. 首先要判断滑轮是向上滚动还是向下滚动,可以在 ...
- vue学习day01
什么是 vue 构建用户界面 用 vue 往 html 页面中填充数据,非常的方便 框架 框架是一套现成的解决方案,程序员只能遵守框架的规范,去编写自己的业务功能! 要学习 vue,就是在学习 vue ...