用手画了11张图终于搞明白了Git工作流,我怀疑你用的是假 Git

article/2025/8/20 2:32:39

号外号外!《死磕 Java 并发编程》系列连载中,大家可以关注一波:

「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁

「死磕 Java 并发编程04」说说Java Atomic 原子类的实现原理

「死磕 Java 并发编程03」阿里二面,面试官:说说 Java CAS 原理?

「死磕 Java 并发编程02」面试官:说说什么是 Java 内存模型(JMM)?

「死磕 Java 并发编程01」10张图告诉你Java并发多线程那些破事

目录

集中式工作流

功能分支工作流

Gitflow 工作流

Forking 工作流

总结

作为一个开发人员每天必不可少要提交代码,但是你真的懂代码提交吗?这篇文章带领大家熟悉一下常用的代码提交方式,大家可以根据自己所在公司团队的开发模式对号入座。

代码提交方式可以用一个专业术语描述:代码工作流,在 SVN 时代大家会使用集中式工作流,所有人都往一个主库分支合入代码;随着技术的演进,以 Git 为代表的分布式代码管理工具横空出世,在 Git 的基础上又逐渐出现了多种代码管理工作流:功能分支工作流Gitflow 工作流Forking 工作流。搬好小板凳,下面一一位大家讲解。

集中式工作流

集中式工作流这种工作方式对于使用过SVN的同学想必会非常的熟悉,让我们思考下在 SVN下的协作体验,不同的开发同学需要依次将本地的修改提交到服务器,如果有冲突就先解决本地的冲突再提交,这个过程中远端的服务器就像是一个集中管理者,管理着所有人的代码提交,所以 SVN的开发协作流程就是典型的集中式工作流。

如果切换到 Git 来维护代码仓,但是开发人员又对 Git 的分支模式不熟悉,能不能用 Git 实现类似的集中式工作流呢?答案是当然可以。

每个开发人员将远程仓库的代码 clone 下来变成了属于自己的本地仓库,提交代码时先提交至本地仓库,然后再推送到远程仓库。

这种模式相比 SVN 只是多了一个本地仓库而已,有了 SVN 的经验开发人员也很快能熟悉这种模式,在前些年有很多公司都是将 Git 作为 SVN 来用的。

从提交记录来看,集中式工作流通常是一条直线往前走,如下图:

集中式代码提交流程

集中式代码提交流程

小结:这种模式不推荐大家使用,因为完全没有发挥出 Git 的作用,类似于用倚天剑屠龙刀来切菜,太浪费了。

功能分支工作流

集中式工作流有一个很大的问题,随着团队内人员不断增多,大家每一次提交代码都可能会遇到冲突,提交代码一分钟解决冲突一小时。

为了便于大家并发开展工作,通常会基于 master 主干分支拉取几个特性分支,每个开发人员关注于自己的分支,需要提交代码时直接提交到本地库的特性分支,在合入到主干分支前通常会拉取最新的代码,如果有冲突先在本地解决好冲突,解决完提交 MR 申请将特性分支合入主干分支。

功能分支工作流下,不会直接将代码合入到主干分支(master),通常是通过其他分支提交 MR(Merge Request),这使得集成一些自动化操作变得简单可行了。

提交 MR 之后团队成员开始围观你写的代码,可以提交检视意见(code review),还可以进行投票(vote),团队 committer 据此合入或者驳回你的 MR。

新功能大量合并到 master 分支后容易造成 master 分支质量不稳定,不稳定会有什么问题?比如线上突然有个 bug 要解决,可能只需要修改一行代码就能解决,但是 master 分支已经合入了大量新特性,测试人员还没来得及测试,那最稳妥的办法就是将代码回退到上一次发版本的时间节点,基于这个节点再修改一行代码,是不是太麻烦了?

为了解决这些问题,Vincent Driessen大佬基于开发实践总结了一套 Git 分支管理的流程和规范,下面详细介绍一下。

Gitflow 工作流

Gitflow 工作流是目前非常成熟的一个方案,它定义了一个围绕项目发布的严格分支模型,通过为代码研发、项目发布以及维护分配独立的分支来让项目的迭代过程更加地顺畅,不同于之前的集中式工作流以及功能分支工作流,Gitflow 工作流常驻的分支有两个:主干分支 master开发分支 develop

功能分支工作流相比,Gitflow工作流没有增加任何新的概念或命令,它给不同的分支指定了特定的角色,定义它们应该如何、什么时候交互。除了功能分支之外,还为准备发布、维护发布、记录发布分别使用了单独的分支。

Gitflow 常见分支

  • 开发主分支:master 分支

    master 分支的代码是可以直接部署到生成环境的,为了保持稳定性一般不会直接在这个分支上修改代码,都是通过其他分支合并过来的。

  • 开发主分支:develop分支

    develop 分支是主开发分支,包含所有要发布到下一个release的代码,主要是由feature分支合并过来的。

  • 临时分支:feature 分支

    feature 分支主要是用来开发一个新特性,一旦开发完成会合入 develop 分支,feature 分支也随即删除掉。

  • 临时分支:release 分支

    当需要一个发布一个新release版本时,会基于develop分支创建一个release分支,经过测试人员充分测试后再合入 master 分支和 develop 分支。

  • 临时分支:hotfix 分支

    当在生成环境发现新的Bug时候,如果需要紧急修复,会创建一个hotfix分支, 充分测试后合入master和develop分支,随后删除该分支。

各分支如何配合工作

(1)master/develop分支

原则上master分支上所有的commit 都应该打上Tag,因为一般情况下master不存在 直接commit;

devlop分支 是基于 master分支创建的,与 master 分支一样都是主分支,不会被删除。

develop 从 master 拉出来之后会独立发展,不会与 master 直接产生联系。

(2)feature 分支

通常一个独立的特性都会基于 develop 拉出一个 feature 分支,feature 分支之间没有任何交互,互不影响。feature 分支一旦开发完成后会立马合入 develop 分支(采用 merge request 或者 pull request),feature 分支的生命周期也随之结束。

(3)release 分支

通常一个迭代上线会拉一个release 分支,开发人员开发完毕所有的代码都已合入 develop 分支,这时候会基于 develop 分支拉出一个 release 分支,测试人员基于该分支进行测试。

(4)hotfix 分支

hotfix分支基于master分支创建,开发完后需要同时回合到master和develop分支,同时在master上打一个tag。

分支命名规范

团队内部可以约定每个分支的命名样式,这里举个例子,大家可以参考:

  1. feature分支:以feature_开头,如 feature_order

  2. release分支:以release_开头,如 release_v1.0

  3. hotfix分支:以hotfix_开头,如hotfix_20210117

  4. tag标记:如果是release分支合并,则以release_开头,如果是hotfix分支合并,则以hotfix_开头。

Forking 工作流

Forking 工作流是以 Github 为代表的一种代码协作方式,开发者通过克隆(fork)源仓库进行编写代码,一旦完成会发起 pull request,源仓库作者可以选择是否接受该 PR。

下面通过 Github 详细讲解 Forking 工作流模式。

随便找一个Github 开源项目,https://github.com/CoderLeixiaoshuai/java-eight-part

右上角有三个按钮:Watch,Star,Fork

Watch 是关注的意思,一旦你点击了之后该项目有任何改动都会第一时间通知到你;

Star 类似于点赞的意思,多给开源项目点个赞,鼓励一下作者;

Fork 本意是分叉,实际上是克隆的意思,点了之后会将该项目拷贝一份到自己的 github 远程仓库中。

fork 示例

fork 示例

在本地执行 git clone 命令将代码克隆到本地,一顿修改操作后提交代码并 push到个人远程仓库中,然后在界面上发起 pull request,项目的原作者会看到你提交的 PR,根据提交的质量作者可以选择接受或拒绝。

Forking 工作流非常适合于类似 Github 这种开源项目,任何一个开发者都可以通过fork + pull request 向项目中贡献代码。

总结

文章介绍了四种工作流,分别是集中式工作流功能分支工作流Gitflow 工作流Forking 工作流

集中式工作流在 SVN 时代比较常见,切到 Git 后不建议再使用这种方式了。

功能分支工作流通常是一个主干 master 分支 + 多个 feature 分支,一般适用于小团队开发。

Gitflow 工作流是在功能分支工作流的基础上进一步演进而来,采用 master + develop 双主分支再加上多个临时功能分支,这是一个非常成熟的代码协作管理的方式,推荐大家使用。

Forking 工作流主要采取 fork + pull request 的模式进行协作,主要用于开源项目。

另外我把大学和工作中用的经典电子书库(包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,这套资源可不是一般那种网上找的资源,是伴随我从学生一路到职场,非常宝贵!

已经打包好了,点击链接获取

最后:

这四种工作流方式各有特色,开发团队可根据自身的特点去选择,不必严格拘泥于某一种方式,适合自己的才是最优的。

大家学会了吗?收藏等于白嫖,点赞才是真爱,雷小帅感谢大家~~~

作者:雷小帅

推荐一个Github 开源项目,『Java八股文』Java面试套路,领取 10G 免费学习资料,Java进阶学习,打破内卷拿大厂Offer,升职加薪!

作者简介:

☕读过几年书:华中科技大学硕士毕业;
😂浪过几个大厂:华为、网易、百度……
😘一直坚信技术能改变世界,愿保持初心,加油技术人!

微信搜索公众号【爱笑的架构师】,关注这个对技术有追求且有趣的打工人。


http://chatgpt.dhexx.cn/article/ZvHUSdhj.shtml

相关文章

Git工作流(分支管理规范)

原文链接:https://nvie.com/posts/a-successful-git-branching-model/ Note of reflection (March 5, 2020) 反思记录(2020 年 3 月 5 日) This model was conceived in 2010, now more than 10 years ago, and not very long after Git itself came int…

Git工作流规范

Git基本原理及命令使用 Git简明教程 Git工作流使用方式选择 微型项目,使用集中式工作流。小型项目,功能分支工作流。中大型的互联网项目,不断需求迭代,一个版本接一个版本,参考并使用如下Git工作流。 Git工作流使用…

给大家推荐一套 git 工作流

一套规范的git工作流能让每个开发者都有自己的本地的完整项目副本。隔离的环境使得每个开发都的工作独立于项目的其它修改。 —— 他们可以在自己的本地仓库中添加提交,完全无视上游的开发,直到需要的时候。 一、分支划分及作用 master —— 主分支&…

Git工作流指南

说明: 个人在学习Git工作流的过程中,从原有的 SVN 模式很难完全理解Git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解: 我们以使用SVN的工作流来使用Git有什么不妥?Git方便的bra…

《Git 系列》Git 工作流,你知道几种?

前言 Git 可能是对我们日常开发影响最大的软件了。 我们使用 Git,肯定要采用某个工作流来作为我们的开发流程。 不同的开发流程,有不同的适用场景, 没有银弹! Workflow - 工作流 Git flowGitHub flowTrunk-based development…

git的各种工作流

Git工作流可以理解为团队成员遵守的一种代码管理方案,在Git中有以下几种常见工作流: 集中式工作流功能开发工作流Gitflow工作流Forking工作流 1)集中式工作流 这种工作方式跟svn类似,它只有一个master分支,开发者会…

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1)创建远程分支 2)删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

git工作流

目录 一、什么是gitFlow工作流二、操作1.(Feature branches)功能分支1.1创建功能分支1.2完成功能分支 2.(Release branches)发布分支3.(Hotfix branches)修复分支 三、例子1、创建develop分支2、张三和罗翔…

Flask+Vue+ElementUI开源框架推荐

项目介绍 一款 Python 语言基于Flask、Vue2.x、ElementUI、MySQL等框架精心打造的一款高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,框架自研了一套个性化的图片上传组件&#x…

实用 | 整理了 34 个最火的 Python 开源框架

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自|视觉算法 我们从近 10000 个 Python 开源框架中评价整理的 34 个最为好用的开源框架,它们细分可以分为 Python Toolkit、Web、Terminal、Code Edito…

Python开源框架简介

前言 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python,那么这12个开源框架,千万别错过,这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试&…

推荐 6 个 yyds 的开源 Python Web 框架

提到 Python 的 Web 框架,第一反应就是老三样,Django,Flask 和 Tornado。如果按流行度来排名的话,应该也是这个顺序。 但是今天重点介绍的框架是FastAPI,现在很多公司招聘的要求都需要会这个框架,非常值得…

22个受欢迎的Python不同类型开源框架

阅读网站源代码需要一定的编程基础,但有一些通用步骤可以帮助你理解: 了解编程语言:你需要了解网站源代码使用的编程语言,比如HTML、钢性铸铁和java描述语言。使用开发者工具:你可以使用浏览器 的开发者工具来查看网站…

最受欢迎 Top 12 Python 开源框架,你都用过吗?| 原力计划

作者 | 学Python的阿勇 责编 | 夕颜 出品 | CSDN博客 今天给大家带来了12个在GitHub等开源网站中最受欢迎的Python开源框架。如果你正在学习python,那么这12个开源框架,千万别错过,这些框架包括事件I/O,OLAP,Web开发&a…

python开源web项目-15个最受欢迎的Python开源框架(转载)

一、Django: Python Web应用开发框架 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的, 即是CMS(内容管理系统)软件。并于2005年7月在B…

2022 全栈开发报告:Python “火”得实至名归、前端框架依旧是“三巨头”

随着科技行业的日新月异,许多企业对于全栈开发人员的需求持续高涨——全栈开发人员好比“全能选手”,具备解决软件开发过程中各个层面的各种问题的能力:既能开发客户端应用,也能搞服务器端应用,甚至产品设计也是他们来…

最受欢迎的Python开源框架有哪些?

导读今年年初,有一件科学界的大事儿曾刷爆朋友圈:引力波的发现。这是LIGO首次直接探测到引力波和首次观测到双黑洞碰撞与并合,探测到的引力波是由13亿光年之外的两颗黑洞在合并的最后阶段产生的,经过13亿光年的时空旅行,最后被美国的“激光干涉引力波天文台”(LIGO)的两台…

python数据库框架_目前最受欢迎的12个Python开源框架

1 Django Django是一款用Python语言写的免费开源的 Python Web应用开发框架,它遵循模型 -视图-控制器(MVC)的架构模式。它是由非营利Django维护软件基金会(DSF)和3条款BSD许可下可用,鼓励快速发展和实用的设计。Django同时是一款在数据库功能、后台功能、末班系统、网址匹配…

python前端框架有哪些_从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个...

从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。 Django: Python Web应用开发框架 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个 Django 应该是最出名的Python框架,GAE甚至Erlang都…

7 款 Python 开源框架的优劣总结

内容源于网络,版权归原作者所有 学习任何一门开发语言都离不开框架,一个框架就好比是一个毛坯房,只需要我们装修就可以入住。如果没有框架我们就只能一砖一瓦的去盖楼房了。框架的种类很多,具体选择要根据实际的业务情况。下面就简…