**Git Flow** 是 Vincent Driessen 提出的**基於分支模型的發布管理策略**。它為不同分支分配嚴格角色,定義清晰的交互規則,適合**有明確發布週期、多版本並行維護、團隊協作規模較大**的項目。雖比 GitHub Flow 等輕量流程複雜,但提供了強大的結構化保障。
| 分支類型 | 命名規範 | 來源/基礎 | 合併目標 | 生命週期 | 核心職責 |
|---|---|---|---|---|---|
主分支master | 固定 `master` | — | — | 永久 | **官方發布歷史**,只接受合併提交,每個提交打標籤 (v1.0, v2.1...) |
開發分支develop | 固定 `develop` | `master` | `master` (發布時) | 永久 | **功能集成主線**,最新開發代碼聚集地,持續集成觸發點 |
功能分支feature/* | `feature/功能名` | `develop` | `develop` | 臨時 (功能完成即刪除) | 單一功能開發,隔離實驗,支援 PR/Code Review |
發布分支release/* | `release/版本號` | `develop` | `master` + `develop` | 臨時 (發布即刪除) | 發布準備:凍結功能、修復 Bug、更新文檔/版本號、測試驗證 |
熱修復分支hotfix/* | `hotfix/版本號` | `master` | `master` + `develop` (或 `release`) | 臨時 (修復即刪除) | 線上緊急 Bug 修復,繞過開發流程快速上線 |
# 本地創建 develop 並推送
git branch develop
git push -u origin develop
# 團隊成員克隆並追蹤 develop
git clone
git checkout -b develop origin/develop
或使用 Git Flow 工具一鍵初始化(自動創建所有分支並配置前綴):
git flow init
# 交互式設置前綴:feature/, release/, hotfix/, support/, version tag prefix
# 完成後自動切換到 develop 分支
# 開始新功能
git flow feature start user-login
# 等價於:git checkout -b feature/user-login develop
# 開發過程:正常 add/commit
git add . && git commit -m "實現登錄邏輯"
# 推送到遠程協作/備份
git flow feature publish user-login
# 等價於:git push origin feature/user-login
# 同事拉取協作
git flow feature pull origin user-login
# 完成功能:合併回 develop,刪除本地/遠程 feature 分支
git flow feature finish user-login
# 內部執行:
# git checkout develop
# git merge --no-ff feature/user-login # --no-ff 保留功能分支歷史
# git branch -d feature/user-login
# git push origin develop
# git push origin --delete feature/user-login
關鍵點:`--no-ff` 合併保留功能分支拓撲,便於回滾與審查歷史。
# 從 develop 切出版本分支
git flow release start v1.2.0
# 等價於:git checkout -b release/v1.2.0 develop
# 發布分支上:只修 Bug、改版本號、更新文檔、生成構建腳本
# 修復發布阻塞 Bug
git commit -am "修復登錄頁報錯"
# 完成發布:合入 master 打 Tag,合回 develop,刪除 release 分支
git flow release finish v1.2.0
# 內部執行:
# git checkout master
# git merge --no-ff release/v1.2.0
# git tag -a v1.2.0 -m "Release v1.2.0"
# git checkout develop
# git merge --no-ff release/v1.2.0
# git branch -d release/v1.2.0
# git push origin master develop --tags
# ⚠️ 記得推送標籤!
git push --tags
# 從 master 切出熱修分支
git flow hotfix start v1.2.1
# 等價於:git checkout -b hotfix/v1.2.1 master
# 修復 Bug
git commit -am "修復支付金額計算錯誤"
# 完成熱修:合入 master 打新 Tag,合回 develop
git flow hotfix finish v1.2.1
# 內部類似 release finish,合入 master + develop 並打標籤
# 記得 git push --tags
| 操作 | Git Flow 命令 | 手動 Git 命令等價 |
|---|---|---|
| 初始化 | `git flow init` | 手動創建分支、配置 |
| 開始功能 | `git flow feature start | `git checkout -b feature/ |
| 發布功能分支 | `git flow feature publish | `git push origin feature/ |
| 拉取功能分支 | `git flow feature pull origin | `git checkout -b feature/ |
| 完成功能 | `git flow feature finish | 合併到 develop、刪除分支、推送 |
| 開始發布 | `git flow release start | `git checkout -b release/ |
| 發布發布分支 | `git flow release publish | `git push origin release/ |
| 完成發布 | `git flow release finish | 合併 master/develop、打標籤、刪除分支 |
| 開始熱修 | `git flow hotfix start | `git checkout -b hotfix/ |
| 完成熱修 | `git flow hotfix finish | 合併 master/develop、打標籤、刪除分支 |
Git Flow 以**結構化分支模型**換取**發布可控性與並行開發效率**。掌握其核心分支職責、合併規則與工具命令,配合 CI/CD 與 Code Review,能讓團隊在「功能開發、版本發布、線上熱修」三條主線上有序推進,實現「開發無干擾、發布無驚險、回滾有依據」的工程化目標。