GitFlow的使用和注意
# GitFlow的使用和注意
# GitFlow-定义
在企业开发中,团队协作通常不会直接在 main
或 master
上开发,而是会遵循一套分支管理流程。
所谓 GitFlow,就是最经典的一种 基于分支的工作流(branching model)。它由 Vincent Driessen 在 2010 年提出,用来规范团队如何创建、合并和管理分支。
GitFlow 定义了分支类型和分工:每种分支有明确职责,整个流程看起来就像流水线。
# 各个分支
# 主分支
main
(或 master
)
- 线上正式运行的代码。
- 只能从
release
或hotfix
分支合并。 - 始终保持稳定可发布状态。
develop
- 主开发分支,所有功能分支的基础。
- 开发完成的功能先合并到
develop
,不会直接影响线上。
# 辅助分支
feature/\*
- 用来开发新功能。
- 从
develop
拉出来,开发完后再合并回develop
。 - 命名:
feature/login-api
、feature/cart-page
release/\*
- 用来准备一次版本发布。
- 从
develop
拉出来,做测试、修复 bug、调整小问题。 - 测试通过 → 合并回
main
和develop
,并打 tag。 - 命名:
release/1.0.0
hotfix/\*
- 紧急修复线上 bug。
- 从
main
拉出来,修复后再合并回main
和develop
。 - 命名:
hotfix/fix-login-bug
# 流程图
main ───────────●─────●──────────────●───────▶
↑ ↑
/ \
hotfix──● ●──release
↑ \
develop ──────●───────────●─────────▶
\ \
●──feature ●──feature
2
3
4
5
6
7
8
9
# 总结
GitFlow = 一种 Git 分支管理流程,主要分为:
main
(线上)develop
(开发主干)feature
(功能开发)release
(发布前测试)hotfix
(线上修复)
它适合 版本发布周期长、多人协作的大型项目。
但对于互联网敏捷项目,现在很多公司改用 GitHub Flow(只有 main
+ feature 分支) 或 GitLab Flow(结合 CI/CD)。
# GitFlow-扩展
线上紧急修复(hotfix)
- 如果线上
main
出了 bug:- 从
main
拉出hotfix/*
- 修复完成后合并回
main
和develop
- 从
# 为什么要合并回 develop
?
因为 develop
可能比 main
超前,已经有很多新功能了,但这个 bug 修复必须保证 未来版本也带上。
否则,等下次发布时,新功能合并到 main
,又会把旧的 bug 带回来。
develop
上的某些提交点会和 main
上完全一样,因为 hotfix 必须回流。
这样才能保证:线上修过的 bug 不会在下一个版本又出现。
# develop和main的关系
develop
会比main
多出很多提交(功能开发、测试提交等)。- 只有当要发布时,才会从
develop
拉出release
→ 稳定后合并回main
。 - 因此,
main
上的每个版本号 tag(比如v1.0.0
,v1.1.0
),都对应develop
历史中的某个稳定节点。
可以这么理解:
develop
:记录了“开发的全过程”,提交很多,可能包含不稳定的代码。main
:只挑选出develop
中那些稳定可发布的里程碑节点。
main ---●────────────●──────────●────────▶
v1.0.0 v1.1.0 v1.2.0
↑ ↑ ↑
develop ---●───●──●──●───●──●──●────●──●────▶
功能1 功能2 修复 功能3 功能4
2
3
4
5
6
# 开发中,线上(main
)出 bug
假设当前情况:
- 你在
develop
上开发新功能(可能一堆代码还没完成,甚至不稳定)。 - 突然线上用户反馈一个严重 bug(在
main
里)。
1.从 main
拉出 hotfix 分支
git checkout main
git checkout -b hotfix/fix-login-bug
2
2.修复 bug & 提交代码
git commit -am "fix: login bug"
自动将所有已被 Git 跟踪的文件的修改(modified files)添加到暂存区,并提交一次,提交信息为 "fix: login bug"
。
等同于 git add + git commit -m "xx"
3.合并到 main
git checkout main
git merge hotfix/fix-login-bug
git tag -a v1.0.1 -m "Hotfix: login bug"
git push origin main --tags
2
3
4
上线发布新版本(例如 v1.0.1)。
这是一个选项,表示:同时推送所有本地的标签(tags)到远程仓库。
- Git 的
tag
通常用于标记发布版本,比如v1.0.0
、v2.1.3
。- 默认情况下,
git push origin main
不会推送标签,只推送分支上的提交。- 加上
--tags
后,所有通过git tag v1.0.0
创建的标签都会被推送到远程。
4.合并回 develop
git checkout develop
git merge hotfix/fix-login-bug
git push origin develop
2
3
确保开发主干也包含这个 bug 修复,不会在未来新版本里“又复活”。
5.删除 hotfix 分支
git branch -d hotfix/fix-login-bug