前几天整理了一下之前项目的开发代码,当时使用了Git来进行代码版本管理。虽然本人熟悉常用的Git操作,但是对分支的管理经验非常欠缺。拿这个项目来说,在项目中有不下20个分支,每个分支间的继承关系相当之混乱,非常不利于代码的安全管理。因此,通过在网络上的学习,总结了一下关于Git分支管理的策略方法,供后续回顾学习。当然必须承认,代码分支管理策略有很多种,不局限于以下介绍。但是下面介绍的这个分支管理策略非常具有工程借鉴意义,几乎适用于所有开发场景。

命名规范

主分支master

首先,代码库应该有且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。Git主分支的名字,默认为master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。团队成员从主分支(master)获得的都是处于可发布状态的代码。

开发分支develop

日常开发应该在另一条分支上完成。我们把开发用的分支,叫做develop分支。开发分支应该总能够获得最新开发进展的代码。如果想正式对外发布,就在master分支上,对develop分支进行merge。简要步骤如下:

# 在master分支上创建develop分支git checkout -b develop master# 切换到master分支git checkout master# 对develop分支合并到当前master分支git merge --no-ff develop

临时分支

除了常设分支以外,还有一些临时性分支,用于应对一些特定场景开发。临时性分支主要有三种:

  • 功能(feature)分支

  • 预发布(release)分支

  • 修补bug(hotfix)分支

这三种分支都属于临时性需要,使用完以后,最好删除,使得代码库的常设分支始终只有master和develop。

Feature分支

feature分支是为了开发某种特定功能,从develop分支上面分出来的。开发完成后,要再并入develop。该分支可以采用feature-xxx的形式命名。简要步骤如下:

# 从develop创建一个功能分支git checkout -b feature-x develop# 开发完成后,将功能分支合并到develop分支:git checkout developgit merge --no-ff feature-x# 删除feature分支git branch -d feature-x

Release分支

release分支是指发布正式版本之前(即合并到master分支之前),我们可能需要有一个预发布的版本进行测试而从develop创建的分支。预发布结束以后,须合并进develop和master分支。它的命名,可以采用release-xxx的形式。

# 创建一个预发布分支git checkout -b release-x develop# 确认没有问题后,合并到master分支git checkout mastergit merge --no-ff release-x# 对合并生成的新节点,做一个标签git tag -a 1.2# 再合并到develop分支git checkout developgit merge --no-ff release-x# 最后,删除预发布分支git branch -d release-x

Hotfix分支

软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进master和develop分支。它的命名,可以采用hotfix-xxx的形式。

# 创建一个修补bug分支git checkout -b hotfix-x master# 修补结束后,合并到master分支git checkout mastergit merge --no-ff hotfix-xgit tag -a 0.1# 再合并到develop分支git checkout developgit merge --no-ff hotfix-x# 删除"修补bug分支"git branch -d hotfix-x

总结

上面许多指令使用的--no-ff的意思是no-fast-farward的缩写,使用该命令可以保持更多的版本演进的细节。如果不使用该参数,默认使用了fast-farword进行merge。两者的区别如下图所示:

最后分享一下整体的分支管理策略图示:

公众号回复git获取「分支管理策略图」

参考资料


https://nvie.com/posts/a-successful-git-branching-model

git master主分支_Git分支管理策略及简单操作相关推荐

  1. git 新建分支并切换到该分支_git分支的创建、删除、切换、合并

    1. 先看一下git的命令: 查看本地分支 git branch : 查看远程分支 git branch -r : 切换分支 git checkout -b agrochemical origin/a ...

  2. git如何选择性合并_Git分支合并选择

    用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并 ...

  3. 常用的Git命令行指令以及图形化界面的简单操作

    命令行操作 常用指令 指令 作用 指令 作用 cd 打开目录 pwd 绝对路径 ls 列出清单 mkdir 新建目录 cp 拷贝 mv 移动 rm 移除 touch 创建文档 一.git版本管理的指令 ...

  4. git 主干修改合并到分支_git分支与主干合并操作

    git分支与主干合并操作 1.主干合并分支 在主干上合并分支 branch (master)git merge branch --squash 提交合并后的代码 (master)git commit ...

  5. git 列出远程标签_Git 标签管理

    Git 可以给仓库历史中的某一个提交打上标签,以示重要.比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 . v2.0 等等). 1 列出标签 在 Git 中列出已有的标签非常简单,只需要 ...

  6. git reset 怎么还原_git reset –hard后的恢复操作

    先说下我遇到的问题和解决办法,然后再放原文. 我遇到的问题 在初始化一个比较大的项目时,由于最后一次commit的文件数量较大,无法成功push,百度无果后想要撤回这次commit,于是手贱用了git ...

  7. git add后取消_git 必看,各种撤销操作

    场景概念说明 首先说明一个概念, git是一个分布式的版本控制工具,分布式即 git 管理的项目是有多个大致平等的仓库的.通过一个例子来说明这个东西. 举一个最简单的使用场景: 你在github 建立 ...

  8. git config设置用户名_git从安装到多账户操作一套搞定(二)多账户使用

    作者:良知犹存 转载授权以及围观:欢迎添加微信:Allen-Iverson-me-LYN 总述 GIT是当今热门代码管理技术,但是如此火的系统,竟然是大神林纳斯花了两周用C写出来的一个分布式版本控制系 ...

  9. GitLab:合并master主支到develop分支上

    git合并主支到分支上 一.将本地分支切换到主支master git checkout master 二.拉取gitlab远程主支仓库到本地 git pull 三.将本地分支切换到分支feature ...

最新文章

  1. spring17:Bean的生命始末标签@PostConstruct,@PreDestroy和改变作用范围的@Scope标签
  2. cfile read 最大读取限制_pandas读取表格后的常用数据处理操作
  3. STL源码剖析 set
  4. 精品家具办公桌椅企业html5官网模板
  5. Leo-io 的C语言实现简单五子棋游戏观后感
  6. c语言学习-猜数字游戏
  7. linux —— ubuntu 初次安装问题
  8. Ventoy+WePE 装机教程(装PVE+ESXI等,不用单独费一个U盘)
  9. 笔记本无线上网卡的种类
  10. 详解双曲函数(对比三角函数推导)
  11. 使用QT+webassembly构建在线报表设计器
  12. qt中的toUtf8, toLatin1, Local8bit编码问题
  13. nodejs使用emailjs发送邮箱邮件
  14. Windows动态链接库使用详解
  15. 问:女孩学编程好就业吗?
  16. C++Primer笔记-A003-decltype使用
  17. 26.(cesium篇)cesium军事标绘-攻击箭头编辑修改(燕尾)
  18. 《微观经济学》 第五章
  19. Objective-C学习资源
  20. Python爬虫学习笔记 -- 爬取糗事百科

热门文章

  1. 容大打印机ip修改工具_M1芯片版Mac无法连接打印机怎么办?
  2. 软件工程(可行性研究讲解)
  3. php cannot call constructor,安装ECshop普遍问题的解决方法
  4. val_loss突然变很大_女朋友突然变得很冷淡是怎么回事?该怎么办
  5. java emoji显示乱码_Java 解决Emoji表情过滤问题
  6. 将指定excel的一列数据提取到另一个excel的指定列
  7. Insql 1.8.2 发布,轻量级 .NET ORM 类库
  8. Day31 python基础--网络编程基础-socketserver
  9. linux Postfix + dovecot + extmail + extman + mysql
  10. JavaOne大事纪:IBM谈OpenJ9和Open Liberty