文档首页 > > 用户指南> 基于CodeHub的团队开发> 分支管理

分支管理

分享
更新时间:2020/11/11 GMT+08:00

什么是分支?

分支是版本管理工具中最常用的一种管理手段,使用分支可以把项目开发中的几项工作彼此隔离开来使其互不影响,当需要发布版本之前再通过分支合并将其进行整合。

在代码托管服务/Git仓库创建之初都会默认生成一条名为master的分支,一般作为最新版本分支使用,开发者可以随时手动创建自定义分支以应对实际开发中的个性场景。

基于Git分支的经典工作模式

在基于分支的代码管理工作模式中,“Git-Flow”在业界被更多人认可,同时也被广泛应用,如果您的团队目前还没有更好的工作模式,可以先从尝试使用“Git-Flow”开始。

Git-Flow是一种基于Git的代码管理工作模式,它提供了一组分支使用建议,可以帮助团队提高效率、减少代码冲突,其具备以下特性。
  • 并行开发:支持多个特性与bug修复并行开发,因其可以同时在不同分支中进行,所以在代码写作时互不受影响。
  • 团队协作:多人开发过程中,每条分支(可以理解为每个子团队)的开发内容可以被单独记录、合并到项目版本中,当出现问题时还可被精确检出并单独修改而不影响主版本的其它代。
  • 灵活调整:通过“快速修复(hotfix)” 分支的使用,支持各种紧急修复的情况,而不会对主版本以及各个团队的子项目产生干扰影响。
    表1 Git-Flow工作模式中分支的使用建议

    分支名

    说明

    有效性

    何时被创建

    何时直接在此分支上开发

    何时被其它分支合入

    何时合入到其它分支

    何时结束生命周期

    master

    核心分支,配合标签,用于归档历史版本,要保证其中的版本都是可用的

    长期存在

    项目仓库建立之初

    从不

    • 项目版本封版时,被develop或release分支合入
    • 已发布版本中发现的bug被修复后,被对应的hotfix分支合入

    _

    _

    develop

    开发主分支,用于平时开发的主分支,应永远是功能最新最全的分支

    长期存在

    在master分支被创建之后

    一般不建议

    • 新特性开发完成后,feature分支合入到此分支
    • 当项目启动开发一个新版本时,被上一次历史发布版本(release、或master)合入
    • 当要发布版本时,合入到release分支
    • 当需要归档版本时合入到master分支

    _

    feature_1\2\3...

    新特性开发分支,用于开发某个新特性,可以几条并行存在,每条对应一个或一组新特性

    临时

    • 收到新特性任务时,基于develop分支创建
    • 当正在开发的新特性任务被拆分成出子任务时,基于对应的母feature分支创建

    当被创建出来,开始开发新特性时

    子feature分支开发、测试完成后,会合入到母feature分支

    当该分支上的新特性开发、测试完成时,合入到develop分支

    其对应的特性已经验收(发布、稳定)后

    release

    发布分支,用于检出某个要发布的版本

    长期存在

    项目首次发布前,基于develop分支创建

    从不

    当需要发布一个版本时,被develop分支合入

    • 当完成一次版本发布,将该版本归档时,合入到master分支
    • 当要基于某一个发布版本,开始开发一个新版本时,合入到develop分支,起到初始化版本的作用

    _

    hotfix_bug1\bug2...

    快速修复分支,用于当现网版本发现bug时,拉出来单独用于修复这些bug的分支

    临时

    当master、bug版本中发现问题时,基于对应版本(一般是master分支)创建

    当被建立出来时

    _

    当其对应的bug修复任务完成时,会将其作为修复补丁合入master、develop分支

    其对应的bug修复,已经验收(发布、稳定)后

    另外在使用Git-Flow工作模式时,业界普遍遵循如下规则:

    • 所有开发分支从develop分支拉。
    • 所有 hotfix 分支从master拉。
    • 所有在master上的提交都必要要有标签 ,方便回滚。
    • 只要有合并到master分支的操作,都需要和develop分支合并,保证同步。
    • master和develop分支是主要分支,他们都是唯一的,其它派生分支每个类型可以同时存在多个。

在控制台上新建分支

  1. 进入仓库列表
  2. 单击仓库名称进入仓库详情。(如何创建仓库?
  3. 切换到“分支”页签,在这里可以看到目前远程仓库中的分支列表
  4. 单击“新建分支”按钮,在弹出的窗口中选择要基于哪个版本(分支或标签)进行创建,填写新分支的名称。
  5. 单击“确定”按钮,即可完成分支的新建并返回分支列表。

在控制台中管理分支

在控制台的分支列表中我们可以进行如下操作。

  • 单击某个“分支名称”,可跳转到该分支的“文件”页签,可查看该分支的内容、历史等信息。
  • 单击某个“最新提交”,可跳转到该分支的最新一次提交记录详情中,可查看本次提交的内容。
  • 单击某个,可以跳转到该分支的“文件”页签,并定位到“对比”子页签,可以对将次分支与其它分支、标签进行差异对比。
  • 单击某个,可以跳转到“合并请求”页签,可对该分支创建分支合并请求
  • 单击某个,可以按提示操作,将该分支进行删除。

另外在控制台中您还可以对分支进行相关的设置:

关于分支的常用Git命令

  • 新建分支
    git branch <分支名称>           #在本地仓库基于目前的工作区,创建一条分支
    示例如下:
    git branch branch001            #在本地仓库基于目前的工作区,创建一条名为 branch001 的分支

    无回显则为创建成功,如下图为使用了重复名称创建,更换一个名称再创建即可。

  • 切换分支
    切换分支可以理解为将该分支的文件内容检出到当前的工作目录。
    git checkout <分支名称>        #切换到指定分支

    示例如下:

    git checkout  branch002        #切换到名为 branch002 的分支

    下图为切换成功:

  • 新建并直接切换到新建的分支

    有一种快速的操作办法,可以直接新建并切换到新建出来的分支,其用法如下:

    git checkout -b <分支名称>     #在本地仓库基于目前的工作区,创建一条分支,并直接切换到该分支

    示例如下:

    git checkout -b branch002      #在本地仓库基于目前的工作区,创建一条名为 branch002 的分支,并直接切换到该分支

    下图为该命令执行成功:

  • 查看分支

    我们可以使用对应的命令查看本地仓库的分支、远程长仓库的分支,亦或是全部,这组命令只是将分支名称罗列,如果想查看分支内的具体文件,请使用 切换分支

    1
    git branch                              #查看本地仓库分支
    
    1
    git branch -r                           #查看远程仓库分支
    
    1
    git branch -a                          #同时查看本地仓库与远程仓库的分支
    

    如下图,分别依次执行了以上三种命令,Git清晰的将本地仓库与远程仓库中的分支以不同的样式展现给我们(远程仓库分支展现形式 remote/远程仓库别名/分支名)。

  • 合并分支

    当一条分支上的开发任务完成了,有时需要将其合并到另一条分支,以做功能归档,分支合并可以理解为将另一条分支最新的修改同步到当前所处分支,其用法如下:

    git merge <要合并过来的分支的名字>        #将一条分支合并到当前的分支中
    分支合并前一般要先切换到被合入的分支,下面以将branch002 合入到master分支为例进行演示:
    git checkout master                       #切换到master分支
    git merge branch002                       #将名为 branch002 的分支合入到master分支

    如下图是上面命令的执行效果,可以看到合并成功,合并了一个文件的变化,其变化是新增了3行内容。

    有时在合并时会提示出现了文件修改冲突(如下图“fileOnBranch002.txt”这个文件在合并时冲突了)。

    解决方法是打开这个冲突的文件,手动编辑以将有冲突的代码(如下图)进行取舍,解决后保存,再进行一次 add 和 commit 操作以将其结果存储进本地仓库。

    这与本地仓库提交到远程仓库时产生文件冲突的解决方法是类似的,您可以参考解决代码提交的冲突以了解其工作原理。

    在实际开发中,如果团队使用了合理的合作模式,可以基本杜绝这种情况的产生。

  • 删除本地分支
    git branch -d <分支名>           

    示例如下:

    git branch -d branch002          #删除本地仓库中,名为 branch002 的分支,下图为执行成功

  • 删除远程仓库分支
    git push <远程仓库地址或别名> -d <分支名>               

    示例如下:

    git push HTTPSOrigin -d branch002        #从别名为HTTPSOrigin 的远程仓库中删除名为branch002 的分支,下图为删除成功

  • 将本地新建的分支推送到远程仓库
    git push <远程仓库地址或别名> <分支名>

    示例如下:

    git push HTTPSOrigin branch001        #将本地名为 branch002 的分支,推送到别名为HTTPSOrigin的远程仓库,下图为推送成功       

如果推送失败请检查连通性:

  • 确保您的网络可以访问代码托管服务。
    请在Git客户端使用如下测试命令验证网络连通性。
    1
    ssh -vT git@codehub.devcloud.huaweicloud.com
    

    如果返回内容含有“connect to host codehub.devcloud.huaweicloud.com port 22: Connection timed out”,如下图所示,则您的网络被限制,无法访问代码托管服务,请求助您本地所属网络管理员。

  • 请检查建立的SSH密钥配对关系,必要时重新生成密钥并到代码托管控制台进行配置;或确认HTTPS密码正确配置。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问