git分支最佳实践

简介: 本文介绍我一年前在自己的项目(包括工作项目和私人项目)中引入的git分支模式,这个模式很成功。

本文介绍我一年前在自己的项目(包括工作项目和私人项目)中引入的git分支模式,这个模式很成功。

image.png


主要分支

中央仓库中有两个长期的分支:

  • master
  • develop

master用作生产分支,里面的代码是准备部署到生产环境的。

develop是可交付的开发代码,也可以看成是用于集成分支,每晚构建从develop获取代码。

develop分支中的代码足够稳定的时候,就将改动合并到master分支,同时打上一个标签,标签的名称为发布的版本号。


辅助分支

通过辅助分支来帮助并行开发,和主要分支不同,这些分支的生命周期是有限的:

  • 特性分支
  • 发布分支
  • 紧急修复分支


特性分支

特性分支可能从develop分支分出,最终必须合并回develop

特性分支(也叫主题分支)用于开发新特性。每个新特性开一个新分支,最终会合并回develop(当特性开发完毕的时候),或者放弃(如果最终决定不开发这个特性)。

特性分支只存在于开发者的仓库中。


创建一个特性分支

develop分支分出:

$ git checkout -b myfeature develop

合并回develop

完成的特性需要合并回develop

$ git checkout develop

$ git merge --no-ff myfeature

$ git branch -d myfeature

$ git push origin develop

使用--no-ff确保总是新生成一个提交,避免丢失曾经存在一个特性分支的历史信息,也能够方便地看出哪些提交属于同一个特性。比较:

![merge --no-ff]http://segmentfault.com/img/bVbYDZ


发布分支

发布分支可能从develop分出,最终必须合并回1developmaster。发布分支以release-*的方式命名。

发布分支为新的发布版本作准备,包括一些小bug的修正和发布的元信息(版本号、发布日期等)的添加。这样develop分支就可以接受针对以后的发布的新特性。

在代码基本可以发布的时候从develop分支分出发布分支。这时要确保此次发布包括的特性都已经合并到develop分支了(同时,为下一版发布准备的特性不能合并到develop分支,必须等待发布分支分出后才能合并)。


创建发布分支

$ git checkout -b release-1.2 develop

$ ./bump-version.sh 1.2

$ git commit -a -m "Bumped version number to 1.2"

bump-version.sh是一个脚本,修改相应文件的信息,以体现版本号已经改变了。


完成发布分支

当发布分支中的代码可以发布的时候,将代码合并到master分支,并打上相应的标签。同时还需要合并到develop分支,因为发布分支里可能包含一些修正bug的代码,合并回去可以确保以后的版本也包含这些修正。

$ git checkout master

$ git merge --no-ff release-1.2

$ git tag -a 1.2

$ git checkout develop

$ git merge --no-ff release-1.2

注意,合并回develop分支很可能导致合并冲突,我们需要手工修复一下,然后提交。之后可以删除发布分支:

$ git branch -d release-1.2


紧急修复分支

可能从master分出,必须合并回developmaster。分支名以hotfix-*开头。

紧急修复分支和发布分支很像,只不过它们是意料之外的。如果生产系统里有一个紧急的bug,必须马上修复的话,我们就从master里分出一个紧急修复分支。

这样,某个人修复紧急bug的同时,团队其他成员可以继续在develop分支上开发。


创建紧急修复分支

$ git checkout -b hotfix-1.2.1master

$ ./bump-version.sh 1.2.1

$ git commit -a -m "Bumped version number to 1.2.1"

修复bug并提交

$ git commit -m "Fixed severe production problem"


完成紧急修复分支

修复bug之后,需要合并回master,同时也需要合并回develop

$ git checkout master

$ git merge --no-ff hotfix-1.2.1

$ git tag -a 1.2.1

$ git checkout develop

$ git merge --no-ff hotfix-1.2.1

以上情况假定不存在发布分支。假设存在发布分支的话,代码不应该合并回develop,而应该合并回发布分支,确保正在准备的发布分支也能收到这个补丁(由于发布分支最终会合并到develop,因此这时不用再另外合并到develop)。

最后,删除这个紧急修复分支:

$ git branch -d hotfix-1.2.1

相关文章
|
10月前
|
存储 安全 开发工具
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
824 4
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
|
6月前
|
存储 缓存 数据处理
71_数据版本控制:Git与DVC在LLM开发中的最佳实践
在2025年的大模型(LLM)开发实践中,数据和模型的版本控制已成为确保项目可重复性和团队协作效率的关键环节。与传统软件开发不同,LLM项目面临着独特的数据版本控制挑战:
663 0
|
7月前
|
开发工具 git
Git版本控制工具合并分支merge命令操作流程
通过以上步聚焦于技术性和操作层面指南(guidance), 可以有效管理项目版本控制(version control), 并促进团队协作(collaboration).
1673 15
|
开发工具 git
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
346 9
|
开发工具 git 开发者
图解Git——分支简介《Pro Git》
Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
726 9
|
开发工具 git 开发者
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
3132 86
|
存储 项目管理 开发工具
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
560 7
|
存储 缓存 Java
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
383 6
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
424 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令