上篇文章主要说到 Git的使用中冲突处理, 本篇文章接着上篇内容继续为大家介绍 Git的分支管理,Git的分支管理非常强大,基本可以解决所有的版本开发情况。
你好,【程序职场】专注于:Spring Boot ,微服务 和 前端APP开发,闲暇之余一起聊聊职场规划,个人成长,还能带你一起探索 副业赚钱渠道,在提升技术的同时我们一起交流 敏捷流程 提高工作效率,从技术到管理一步步提升自我!
标签:一个执着的职场程序员!
前言
一,分支作用(解决的问题)
二,Git分支架构模型
三,创建分支
四,合并分支
五,解决合并冲突
通过Git可以对项目的版本进行管理。
但是如果直接使用Git的软件会比较麻烦,因为是通过命令进行操作的,使用起来还是没有可视化的工具更直观,当然这个也看个人兴趣爱好。 Sourcetree则可以与Git结合,提供图形界面,使用会方便很多。
那么通过SouceTree工具是否可以打分支,进行分支管理呢?答案肯定是 可以的,而且使用起来更easy,那么分支主要解决什么问题呢?为什么不直接在 默认的分支master上直接使用呢?
1,有哪些分支,各个分支的作用
1,master分支:主分支,产品的功能全部实现后,最终在master分支对外发布。
2,develop分支:开发分支,基于master分支克隆,产品的编码工作在此分支进行。
3,release分支:测试分支,基于delevop分支克隆,产品编码工作完成后,发布到本分支测试,测试过程中发现的小bug直接在本分支进行修复,修复完成后合并到develop分支。本分支属于临时分支,目的实现后可删除分支。4,bugfix分支:Bug修复分支,基于master分支或发布的里程碑Tag克隆,主要用于修复对外发布的分支,收到客户的Bug反馈后,在此分支进行修复,修复完毕后分别合并到develop分支和master分支。本分支属于临时分支,目的实现后可删除分支。
5,feature分支:功能特征分支,基于develop分支克隆,主要用于多人协助开发场景或探索性功能验证场景,功能开发完毕后合并到develop分支。feature分支可创建多个,属于临时分支,目的实现后可删除分支。
2,分支主要解决什么问题?应用的场景?
1,多人同时开发,需要在开发分支做调整,最后合并到主分支(放置修改主分支导致主分支异常)
2,不同的人开发不同的功能,需要打多个分支,每个分支完成后合并分支到主分支,避免在一个分支上提交出现重复的异常冲突
3,上线项目版本优化,需要打修复分支,处理修改问题4,测试分支,用于测试版本,避免在主分支做问题修正
3,主分支直接使用的后果?
1,出现冲突异常
2,导致主分支出问题
3,多人开发在一个分支上 ,受影响
此图来之网络,充分表达了各个分支的作用。
我们以Github上项目为例,该项目是我在Github上创建,默认只有一个 master主分支,首先我们需要Clone克隆 master分支到本地,如下图:
我们以两个用户来验证分支的操作,用户1和用户2,用户1创建分支User1_dev 并推送服务器,用户2创建分支User2_dev 并推送到服务器。
创建的两个开发分支,用于多用户开发,需要合并对方分支 和 开发完成后合并到主分支操作。
1, 用户1创建分支 User1_dev,并推送到Github服务器
此时Gihub服务器已经有用户1创建的分支了,可以在本地查看创建的服务器是否有分支,如下图:
2, 用户2创建分支 User2_dev,并推送到Github服务器
用户2的操作和用户1是一样的唯一不一样的是 不同的人操作的,如下图:
通过上面的两个用户的操作,分别创建了dev开发分支,两个用户开发两个不同的功能模块。
通过上面一小节的分支创建,我们明白了在什么情况下创建分支,并且如何创建分支(需要在哪个分支上创建,按照自己需求来创建)。
那么有些小伙伴就说了,多个人创建了多个分支以后 在基础上做开发,开发完成了,怎么合并这些分支呢?
我们就以上面两个用户创建的两个不同分支,在基础上做开发后合并为例。
1,首先用户1和用户2 拿到项目经理的需求,项目开发计划很着急,并且两个功能是无关联的,可以单独开发,这时候就需要两个人并行开发,所以两个用户创建了两个开发分支(一般都是项目负责人创建后开发人员更新分支,我们这里没有负责人,人人都是leader,哈哈哈),User1_dev和User2_dev分支
2,用户1和用户2分别在分支上做开发。
3,开发后提交到远程服务器分支上
如下图:
用户2开发后提交远程分支
功能开发完成后,项目经理说要他们各一个版本,当然需要两个功能都有的,这时候就需要合并代码了,需要用户1合并用户2,同时 用户2也要合并用户1的。
那么怎么合并呢? 首先确保用户1和用户2已经把自己的开发 推送到远程服务器分支上。
然后将对方的分支拉取下来,每次想看的话先获取,然后再拉取最新的代码到本地仓库即可。
那么如何拉取对方的分支呢,我们通过用户1拉取用户2的分支为例:
步骤:找到远程----》origin---》分支User2_dev---》检出origin/User2_dev
检出分支成功后,在分支中可以看到拉取的分支。
注意:左边分支中的 黑色加粗表示当前所处的分支,可以任意双击切换!
现在用户1和用户2都想将对方的代码合并到自己分支,这是就需要分支的合并。例如用户1合并用户2的分支:
1,首先左边分支 切换到自己分支(用户1)
2,右键点击用户2的分支,选择 合并User2_dev到当前分支,然后在对话框中选择确认合并
打开本地的文件,可以看到 用户2的开发文件中信息已经有用户2 添加的新功能了
注意,注意,注意,这个时候千万不要以为已经成功了,最后不要忘了将各自合并后的分支推送。
现在用户1和用户2的开发任务结束了,各自的本地分支内容也推送到了远程仓库,项目经理就可以clone克隆远程仓库的项目到本地,拉取用户1和用户2的提交的最新分支,将它们合并到主分支master中。这里我们以任一方为项目经理,进行主分支的合并,合并完成并推送。
1,克隆主分支master,拉取用户1和用户2分支
2,合并用户1分支,合并用户2分支(操作和上面用户1合并用户2一样)
合并冲突时很常见的,一般出现在一个文件多个人修改,这样在合并第一个用户的代码时是正确的,但是合并第二个用户的代码时就会出现冲突异常,假设用户1和用户2 两人同时在同一个文件进行了操作,那最后合并时就会出现冲突。
比如:我们以公用文件为例,两个人同时在改文件添加了信息,推送到远程服务器
此时当用户1和用户2推送自己的分支到远程仓库后,项目经理拉取代码进行合并:
假设首先合并用户1到master没有问题,但是当合并用户2到master时就会提示合并出现了冲突,需要解决冲突。
点击关闭,然后切换到文件状态,找到出现冲突的文件,会有相应的冲突信息:
有冲突就要解决,右键单击冲突文件,选择解决冲突,这里有两个选项:
1、使用 我的版本 解决冲突
2、使用 他人版本 解决冲突
这里项目经理首先是将用户的分支合并到主分支master上
那么“我的版本”就是对应的用户1的,“他人版本”对应的就是用户2的。如果首先合并用户2的分支,那么对应关系相反。总的来说,“我的版本”对应的是首先合并到主分支master的。
采用一个人的版本,那么在冲突文件中就只会保留该人修改的代码,例如我这里就选择”使用 我的版本 解决冲突“,那么在公用文件中就只会保留用户1添加的代码。
OK,本文我们就先说到这里,有问题欢迎留言讨论。下一篇我们说一下: 标签的管理。