【git分支管理策略】如何高效的管理好代码版本

简介: 【git分支管理策略】如何高效的管理好代码版本

1.分支管理策略

分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法,让分支之间能科学合理、高效的进行协作,帮助我们在整个开发流程中合理的管理好代码版本。

目前有两套Git分支管理策略GitHub Flow和GitFlow,它们各自定义了一套规范,帮助开发者更好地组织和管理源代码的版本控制流程。

GitHub Flow

简介:

GitHub Flow 是由GitHub团队推广的一种简单、灵活且快速的工作流程,特别适合小型团队和持续交付环境。

核心概念:

  • 所有开发都是基于main分支(原称master,现在推荐使用main)。
  • 新的功能开发通过创建短期的特性分支(feature branches)。
  • 特性分支完成后,通过Pull Request (PR) 提交到main分支。
  • PR期间进行讨论、审查和自动化测试,只有当所有工作满足要求时,才将其合并至main。

优点:

GitHub Flow的优势是快速迭代,频繁部署,强调每个特性分支都应具备随时可部署的状态。

GitFlow

简介:

GitFlow 是一种更为严谨和复杂的分支模型,适用于大型项目和需要严格版本控制的企业级开发环境。

核心概念:

  • 分支分为两大类:持久分支和临时分支。
  • 持久分支包括:main(稳定版)、develop(开发版)。
  • 临时分支包括:feature(特性分支)、release(发布分支)、hotfix(热修复分支)。
  • develop分支作为日常开发集成的分支,每次新增功能或修复都在独立的feature分支上完成,完成后合并回develop。
  • 当产品即将发布时,创建一个release分支,进行测试和最后的调整,确认无误后合并到main和develop,并打上版本标签。
  • 如果生产环境中发现了紧急问题,那么在main基础上创建hotfix分支进行修复,修复完毕后同样合并回main和develop。

优势:

结构清晰,易于跟踪每个阶段的代码状态,有利于多人协同和大型项目管理,尤其对于那些有明确版本周期和稳定版需求的项目。 总结来说,GitHub Flow 更注重敏捷开发和快速迭代,简化了分支结构;而 GitFlow 则提供了详细的分支管理方案,更适合需要精细化版本管理和长周期开发的场景。目前市面上各团队常用的管理策略基本上都是基于GitHub Flow策略的。

2.我用的分支管理策略

目前作者所在的团队采用的分支管理策略就是基于GitHub Flow策略的。

我们有以下几个分支:

  • master,稳定主分支
  • pre-release,稳定测试分支
  • develop,开发分支
  • feature,单人新特性分支
  • release,发布分支
  • patch,维护分支

当我们开发新功能的时候会先分一下任务,然后各自从develop分支上拉一个属于自己的feature分支,这个feature一般会命名为:下个版本的版本号-feature-自己名字的缩写


任务有轻重缓急和难易之分,一个大版本的所有新需求很难在统一的一个时间点上完成,所以一般都是分批次提测的,最后合并在一起发版。提测的时候各自将自己要提测的内容从自己的feature上合并到develop分支上,再从develop分支合并到pre-release上。将pre-release部署到测试环境中用于测试。之所以这样做是在实践中发现很多时候develop并不是稳定的,大家都在往上面合并代码,直接将develop用于部署测试往往无法保证测试环境的稳定,会造成阻塞。所以有一个pre-release用来保证测试环境的稳定。测试期间的bug修复也是先修自己的feature然后合并到develop然后合并到pre-release。


要注意上面的合并一般指的都是cherry pick,一条一条的合并,分支级别的merge是很容易将pre-release和develop合乱的。


所有新特性都测试完成后,将develop合并到release上,然后基于release打tag发版。


发版后有可能还会发现一些bug,一般会基于发版的tag拉一个patch分支来进行快速修复。这时候修复的bug会先在patch上修复,修复完毕后合并到develop分支上。最后这个patch分支在维护一段时间后会被丢弃。

3.一些常见问题

1.如何打tag?

在IDEA种可以通过图形化的界面来打tag:

也可以通过命令来打tag:

git tag -a <tag-name> -m "<tag-message>"

打完tag之后push到远端仓库即可。

2.如何切到某个tag

打完tag之后有些时候我们要用到打tag的代码版本,可以通过命令跳过去:

git checkout -b <new-branch-name> <tag-name>

3.如何基于tag拉分支?

打完tag代码就算是封板了,但是发版后仍然会有一些小问题会持续暴露出来,需要我们持续修复,于是我们需要基于tag拉出一个hotfix分支来,在这个分支上进行发版后的bug修复,可以通过命令来从某个tag拉出一个分支:

git checkout -b <new-branch-name> <tag-name>

3.如何合并?

在hotfix上修复的bug在当前的开发分支上当然也是存在的,所以我们要将hotfix上的bug修复持续的合并到开发分支上,这时候尽量不要用分支级别的合并命令merge来操作,尽量将bugfix一条一条的合并到开发分支上。


在IDEA上可以直接通过图形化界面将某个分支上的修改单条的合并到当前分支。操作很简单,首先保证自己当前在接收合并的分支上,然后在git log中找到要合并过来的提交,cherry pick过来即可:

4.如何比对分支之间的区别?

从hotfix合并到develop分支,这种两个分支之间一条一条的合并难免会合并漏,最好的方式当然是要比对出两个分支之间的差异,在IDEA中很好比对差异:

目录
打赏
0
0
0
0
22
分享
相关文章
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
59 9
图解Git——分支简介《Pro Git》
Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
120 9
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
260 86
【Android Git】Git版本回退方式
在实际操作中,选择合适的版本回退方式,可以有效地管理代码版本,提高开发效率和代码质量。
46 26
|
22天前
|
pycharm如何查看git历史版本变更信息
通过上述步骤,你可以在 PyCharm 中轻松查看 Git 的历史版本变更信息,无论是针对整个项目、特定文件还是分支。使用 PyCharm 的 Git 集成功能,可以更高效地管理和审查代码变更,提高开发过程的透明度和可维护性。
63 19
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
126 16
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
图解Git——分支管理《Pro Git》
分支管理是 Git 中的重要机制,支持并行开发和清晰的工作流。常用命令包括:`git branch` 列出所有分支,`git branch -v` 查看最后一次提交,`git branch --merged` 和 `git branch --no-merged` 分别查看已合并和未合并的分支。创建新分支用 `git branch &lt;branch-name&gt;`,删除分支用 `git branch -d`(已合并)或 `-D`(强制删除)。建议定期清理已完成任务的分支,保持代码库整洁,并使用有意义的分支命名规范。注意强制删除未合并分支时可能丢失数据。
40 5
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
84 7
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
44 6
代码管理的艺术:你的团队是否还在为 Git 分支管理头疼?
本文回顾了作者从2~3人初创团队到百人技术团队的经历,分享了代码管理工具从无到SVN再到Git的演变。重点介绍了Git Flow和GitHub Flow两种常用的Git分支管理模型,分析了它们的适用场景和优缺点。Git Flow适合中大型项目,而GitHub Flow则更适合小型团队和Web应用开发。
146 0

相关实验场景

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等