菜单

zzhdzs
zzhdzs
发布于 2026-02-06 / 38 阅读
0
0

Git Flow 使用指南

Git Flow简介

下述内容引用自DeepSeek。

Git Flow是一种流行的 Git分支模型和工作流程,由 Vincent Driessen在2010年提出。它定义了一套严格的分支结构和操作规范,旨在为软件开发,特别是涉及多版本并行和维护的项目,提供清晰、可管理的协作框架。

提出者与规划信息 Git Flow的核心思想由 Vincent Driessen在其博客文章《A successful Git branching model》中系统阐述。该模型围绕几个关键的分支类型进行组织:

  • 主分支 (main/master):用于存放稳定、可发布的代码。每个提交点理论上对应一个发布版本。

  • 开发分支 (develop):作为功能集成的中心分支,所有新功能都合并至此,代表下一个发布版本的代码基线。

  • 功能分支 (feature):从 develop分支创建,用于开发独立的新功能。完成后合并回 develop分支。

  • 发布分支 (release):当 develop分支的功能足够进行一次发布时,从 develop创建。此分支仅用于修复 Bug、准备版本号等发布准备工作,完成后分别合并回 maindevelop

  • 热修复分支 (hotfix):从 main分支创建,用于快速修复生产环境中的紧急 Bug。修复后需同时合并回 maindevelop分支。

主要用处

  1. 支持并行开发:清晰的功能分支和发布分支隔离,使得多个功能可以同时开发而互不干扰。

  2. 规范发布流程:通过专门的发布分支,将功能集成、测试、Bug修复与最终发布流程解耦,使版本发布更可控、更稳定。

  3. 简化维护工作:明确的热修复分支流程,为生产环境紧急问题的处理提供了标准化路径,确保修复能快速、安全地部署。

  4. 增强项目可管理性:严格的分支模型为团队提供了共同遵守的规则,降低了分支管理的复杂度,特别适用于有固定发布周期或需要长期维护多个版本的中大型项目。


从上面可以看出Git Flow是一个基于git的使用规范或者说高级应用,其有主分支开发分支功能分支发布分支热修复分支等之分。如果是初学者,其功能可能比较复杂。记住下面这个就行

  1. main是用于发版的,对外给用户的,除非确认功能完全测试OK,就不要碰。

  2. develop是用于开发管理的,主要负责开发集成、发版main

  3. feature是用于功能开发,每个功能都有一个分支,功能分支从develop创建,开发测试完成后并回develop分支,然后这个分支就没用了,删除。

  4. release是develop和main的桥梁,同时也是软件可靠性的最后一道保险。release从develop创建,会对发布到main分支的develop代码再进行一次统一测试和版本修改,通过后测试后发布到main和develop分支中。

  5. hotfix是用于紧急需求和紧急修复,如果main中出现重大BUG或者紧急需求,就需要通过main创建紧急修复分支,修复完成后同步给main和develop。

  6. main每次发布创建都需要添加标签。

可以参考下图,下面的灰线就是没有版本,图片拷贝自菜鸟教程文档:Git Flow | 菜鸟教程

Git Flow使用

git自身是直接支持的,那么首先我们直接看一git flow支持的功能。

本文主要是介绍git flow的,就不介绍git的安装了。

D:\>git flow help
usage: git flow <subcommand>

Available subcommands are:
   init      Initialize a new git repo with support for the branching model.
   feature   Manage your feature branches.
   bugfix    Manage your bugfix branches.
   release   Manage your release branches.
   hotfix    Manage your hotfix branches.
   support   Manage your support branches.
   version   Shows version information.
   config    Manage your git-flow configuration.
   log       Show log deviating from base branch.

Try 'git flow <subcommand> help' for details.

subcommand功能如下:

  • init:初始化一个类似支持git flow规范的git项目,就git init一样。

  • feature:管理新增功能开发分支,这个分支一般基于develop 分支。

  • bugfix:管理bug修复功能开发分支,这个分支一般基于

  • release:管理版本发布开发分支。从develop 分支创建

  • hotfix:管理热修复分支,多数是紧急需求和紧急BUG修复。从main分支中创建

  • support:管理功能支持分支,用于旧版维护。从main分支中创建

  • version:显示git flow版本信息

  • config :查看git flow 相关配置

  • log显示当前分支与基分支之间的提交历史差异。

为了更好得介绍这些命令,下面从头开始搭建一次

Git Flow初始化

首先创建一个文件夹,执行git flow ini ,如下图

这个时候会要求输出一些信息,每个的含义如下:

Branch name for production releases: [master] 主分支名称,一般都为main或者master,这里给的main,因为我们远程服务器也是用的main

Branch name for "next release" development: [develop] 设置开发分支名称,这里选择的默认develop

Feature branches? [feature/] 设置Feature分支的开头部分,这里设置的默认

Bugfix branches? [bugfix/] 设置Bugfix分支的开头部分,这里设置的默认

Release branches? [release/] 设置版本发布分支的开头部分,设置的默认

Hotfix branches? [hotfix/] 设置热更新分支的开头部分,设置的默认

Support branches? [support/] 设置功能支持分支的开头部分,设置的默认

Version tag prefix? [] 设置tag前缀,这个设置的默认,不自动添加

Hooks and filters directory? 配置钩子和过滤器所在文件夹,这里也设置的默认文件夹地址

填写好后,用git branch 查看分支,可以看见已经生成了两个分支,一个是我们设置的main分支,一个是develop开发分支。

然后准备连接我们的远程服务器端,首先设置我们的账号密码上传用户名。使用下面的命令

git config user.name "XXX" # 用户名,上传这个代码的用户名称,不是登陆账号
git config user.email "XXX@XXX.XXX" # 登陆使用的Email
git config user.password "XXXXXXXX" # 登陆密码
# 如果要配置为全局使用这个账号密码,可以加global配置
# git config --global user.name "XXX" # 用户名,上传这个代码的用户名称,不是登陆账号
# git config --global user.email "XXX@XXX.XXX" # 登陆使用的Email
# git config --global user.password "XXXXXXXX" # 登陆密码

如果功能正常,运行截图如下:

GitLab项目创建

这里的GitLab的版本是18.8.2-ce.0

因为用的个人服务器,这里还需要添加GitLab,关联个人服务器,这里就需要在GitLab上先创建一个仓库,然后本地仓库再关联。

首先选择项目,创建项目,创建一个空白项目

按照下面的步骤简单创建一个项目,然后创建就OK了

连接到远程服务器

然后在本地仓库目录执行以下命令连接服务器

git remote add origin 你的远程git仓库地址
# 示例:git remote add origin http://127.0.0.1:8032/zzhdzs/tmpproject/

如果功能正常,运行结果如下

然后添加我们的修改,上传我们的develop分支,使用如下命令

git add . # 将当前文件夹修改添加到临时存储
git commit -m "Init" # 将修改保存到本地仓库,写明修改项,这里直接给的初始化
git push -u origin develop # 将本地仓库推送到服务器,这里之所以是develop是因为我们用git flow创建后默认就在develop分支,且我们需要将develop分支上传

如果功能正常,运行结果如下

上传到服务器,develop的同步就成功了。

GitLab对分支的管理

推荐设置一下对main仓库和develop仓库的权限管理,不要让任何人有权限直接向main和develop分支推送代码,只能通过合并请求合并,且main分支推荐由集成或者项目管理人员进行推送。设置如下:

本地更新main主分支

develop设置完成后,就可以更新main主分支了,使用下面的命令切换到主分支

git checkout main # 切换到main主分支,这里main根据设置的主分支来

如果功能正常,运行结果如下

执行拉取命令拉取服务器更新。

git pull origin main --allow-unrelated-histories # 拉取服务器修改到本地,--allow-unrelated-histories为允许强制合并为一个

如果功能正常,运行结果如下:

Git Flow Feature使用

这个时候我们就可以用git flow feature相关命令了,先看看 git flow featur命令,使用命令 git flow featur help 查看,得到内容如下:

命令很多,推荐只看一下自己需要的,如果想要了解详情,可以自行展开查看

D:\tmp\tmpproject>git flow feature help
usage: git flow feature [list]
   or: git flow feature start
   or: git flow feature finish
   or: git flow feature publish
   or: git flow feature track
   or: git flow feature diff
   or: git flow feature rebase
   or: git flow feature checkout
   or: git flow feature pull
   or: git flow feature delete

    Manage your feature branches.

    For more specific help type the command followed by --help
所有命令详解,可展开命令行查看命令详细

git flow feature [list] 显示分支信息

git flow feature [list] :显示当前所有新功能开发分支,list为可选项,帮助信息如下。

D:\tmp\tmpproject>git flow feature list -h
usage: git flow feature [list] [-h] [-v]

    Lists all the existing feature branches in the local repository.

    -h, --help            Show this help
    -v, --[no-]verbose    Verbose (more) output
# 翻译信息:
# 显示所有本地feature分支信息
# -h 显示帮助
# -v 显示分支详细信息

git flow feature start 创建分支

git flow feature start :创建一个feature分支,后面需要跟feature名称,帮助信息如下。

D:\tmp\tmpproject>git flow feature start -h
usage: git flow feature start [-h] [-F] <name> [<base>]

    Start new feature <name>, optionally basing it on <base> instead of <develop>

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
    -F, --[no-][no]fetch  Fetch from origin before performing local operation
# 翻译信息:
# 创建新feature分支,分支名称为 <name>,可选参数: <base> :基于 <base> 分支而不是默认分支 <develop>
# -h 显示帮助
# --showcommands 显示feature创建过程中使用的git命令
# -F 在创建分支前会先从远程仓库更新<base>或<develop>分支

git flow feature finish 结束分支

git flow feature finish :feature分支开发完毕,结束此分支,结束此分支后会将修改项合并到develop中,然后删除分支(可选),后面需要跟分支名称。使用帮助信息

D:\tmp\tmpproject>git flow feature finish -h
usage: git flow feature finish [-h] [-F] [-r] [-p] [-k] [-D] [-S] [--no-ff] <name|nameprefix>

    Finish feature <name>

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
    -F, --[no-][no]fetch  Fetch from origin before performing finish
    -r, --[no-][no]rebase Rebase before merging
    -p, --[no-][no]preserve-merges
                          Preserve merges while rebasing
    --[no-][no]push       Push to origin after performing finish
    -k, --[no-][no]keep   Keep branch after performing finish
    --keepremote          Keep the remote branch
    --keeplocal           Keep the local branch
    -D, --[no-][no]force_delete
                          Force delete feature branch after finish
    -S, --[no-][no]squash Squash feature during merge
    --no-ff               Never fast-forward during the merge
# 翻译信息:
# 结束当前feature分支
# -h 显示帮助
# --showcommands 显示feature结束过程中使用的git命令
# -F 在执行结束操作前会先从远程仓库更新<base>或<develop>分支
# -r 在合并之前先对功能分支进行 rebase 操作,将功能分支变基到最新的 develop 分支上,使提交历史更线性
# -p 与 -r 一起使用,在 rebase 时保留合并提交
# --[no-][no]push 在合并完成后推送到远程仓库
# -k 在合并结束后保留此分支
# --keepremote 保留远程分支
# --keeplocal 保留本地分支
# -D 合并结束后强制删除 feature 分支
# -S 将功能分支的所有提交压缩成一个提交,创建一个新的合并提交,而不是保留功能分支的完整提交历史
# --no-ff 在合并时禁止快进(fast-forward)合并。这样即使可以快进合并,也会创建一个合并提交,以保留功能分支的历史。

git flow feature publish 上传分支

git flow feature publish :将feature分支上传到服务器,用于分支远程与其他用户联调。命令如下:

D:\tmp\tmpproject>git flow feature publish -h
usage: git flow feature publish [-h] [<name>]

    Publish feature branch <name> on origin.
    When <name> is omitted the current branch is used, but only if it's a feature branch.

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
# 翻译信息:
# 将feature分支<name>上传到远程仓库
# 如果没有填写,则上传当前feature分支,注意:只有当前分支为feature时才可用
# -h 显示帮助信息
# --showcommands 显示feature提交过程中使用的git命令

git flow feature track 获取并跟踪分支

git flow feature track :将远程仓库获取并追踪一个feature分支,一般用于联调

usage: git flow feature track [-h] <name>

Start tracking feature <name> that is shared on origin

-h, --help Show this help
--showcommands Show git commands while executing them
# 翻译信息:
# 从远程仓库获取并追踪feature分支<name>
# -h 显示帮助信息
# --showcommands 显示feature获取过程中使用的git命令

git flow feature diff 分支比较

git flow feature diff :显示feature分支的修改内容

D:\tmp\tmpproject>git flow feature diff -h
usage: git flow feature diff [-h] [<name|nameprefix>]

    Show all changes in <name> that are not in the base

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
# 翻译信息:
# 显示feature分支<name>在基分支上的变更点
# -h 显示帮助信息
# --showcommands 显示feature分支变更点获取过程中使用的git命令

git flow feature rebase 分支变基

git flow feature rebase将feature分支重新基于某个基础分支(默认为develop)进行rebase操作

这里介绍一下rebase,rebase就是变基操作,就是更改更新我们的基板,比如我们从develop版本3开始更新,开发一段时间后,develop版本变成7了,我们可以用rebase将我们的基板改为7,但是其实这个是不推荐的。无法有效体现我们提交的变化性和时效性

D:\tmp\tmpproject>git flow feature rebase -h
usage: git flow feature rebase [-h] [-i] [-p] [<name|nameprefix>]

    Rebase <name> on <base_branch>

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
    -i, --[no-][no]interactive
                          Do an interactive rebase
    -p, --[no-][no]preserve-merges
                          Preserve merges
# 翻译信息:
# feature分支<name>的基板更新,更新基于feature的原基板。
# -h 显示帮助信息
# --showcommands 显示执行中使用的git命令
# -i 打开交互式变基界面,允许你修改、重新排序、压缩提交等
# -p 保留合并提交:在变基时尝试保留合并提交的结构,默认情况下,rebase 会线性化历史,忽略合并提交,使用此选项会尝试保留分支中的合并点

git flow feature checkout 分支选择

git flow feature checkout :跳转feature分支

D:\tmp\tmpproject>git flow feature checkout -h
usage: git flow feature checkout [-h] [<name|nameprefix>]

    Switch to feature branch <name>

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
# 翻译信息:
# 跳转feature分支<name>
# -h 显示帮助信息
# --showcommands 显示执行中使用的git命令

git flow feature pull 分支拉取(同git flow feature track )

git flow feature pull :同git flow feature track ,就不介绍了

D:\tmp\tmpproject>git flow feature pull -h
The command 'git flow feature pull' will be deprecated per version 2.0.0. Use 'git flow feature track' instead.
usage: git flow feature pull [-h] <remote> [<name>]

    Pull feature <name> from <remote>

    -h, --help            Show this help
    --showcommands        Show git commands while executing them

git flow feature delete 分支删除

git flow feature delete :删除feature分支

D:\tmp\tmpproject>git flow feature delete -h
usage: git flow feature delete [-h] [-f] [-r] <name>

    Delete a given feature branch

    -h, --help            Show this help
    --showcommands        Show git commands while executing them
    -f, --[no-][no]force  Force deletion
    -r, --[no-][no]remote Delete remote branch
# 翻译信息:
# 删除指定的feature分支
# -h 显示帮助信息
# --showcommands 显示执行中使用的git命令
# -f 强制删除
# -r 删除远程分支

实际使用

先使用 git checkout develop先跳转到develop分支。

假设我们需要新增两个功能,这个时候我们创建两个feature分支,命令为test1分别在两个分支下创建一个文件。

首先使用如下命令创建test1分支,git会自动跳转到这个feature分支

比较推荐git flow feature start -F test1,可以自动更新develop。

git flow feature start test1 # 创建一个feature分支

如果执行成功会显示如下信息:

然后在分支上创建一个文件,然后上传到test1分支:

这里使用chcp 65001,如果不加会出现文本乱码问题

chcp 65001
echo "测试文本" > test1.txt
git add .
git commit -m "创建test1.txt"

然后使用 git flow feature publish test1上传到云端,等会用来创建合并请求。

git flow feature publish test1

然后来到gitlab,准备创建合并请求,选择如下所示

合并后,分支被删除,在本地,我们也删除我们的本地分支,然后更新develop。

git flow feature delete test1
git pull origin develop

然后就完成了修改。其他功能类似的,按照同样的方法执行即可。


评论