iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

30天 Git 版本控制實戰筆記系列 第 22

Day 22:Git Flow 工作流程 - 企業級分支管理策略

  • 分享至 

  • xImage
  •  

今日目標
• 理解 Git Flow 工作流程
• 學習不同的分支管理策略
• 掌握版本發布流程
• 建立適合團隊的工作流程
什麼是 Git Flow?
簡單比喻:
Git Flow = 專案開發的交通規則

就像道路系統:
🛣️ 高速公路 = main(正式版本)
🚗 一般道路 = develop(開發版本)
🛤️ 小路 = feature(功能分支)
🚑 緊急車道 = hotfix(緊急修復)
為什麼需要 Git Flow?
❌ 沒有規範的混亂:

  • 所有人都在 main 開發
  • 不知道哪個是穩定版本
  • 發布時一團亂
  • bug 修復影響到開發

✅ 使用 Git Flow 的秩序:

  • 清楚的分支職責
  • 穩定的發布流程
  • 開發與發布分離
  • 團隊協作順暢

Git Flow 分支結構
核心分支(長期存在):

  1. main 分支(正式版本)
    用途:
  • 存放正式發布的版本
  • 隨時可以部署到生產環境
  • 每個 commit 都是一個發布版本

規則:

  • 只能從 release 或 hotfix 合併
  • 不能直接在上面開發
  • 每次合併都要打 tag
  1. develop 分支(開發版本)
    用途:
  • 最新的開發進度
  • 整合所有功能分支
  • 準備下一次發布

規則:

  • 從 main 分支出來
  • 功能開發完成後合併回來
  • 定期發布時合併到 release
    輔助分支(臨時存在):
  1. feature 分支(功能開發)
    命名:feature/*
    例如:feature/user-login
    feature/shopping-cart

用途:

  • 開發新功能
  • 每個功能獨立分支

流程:
develop → feature → develop
4. release 分支(發布準備)
命名:release/*
例如:release/1.2.0
release/2.0.0

用途:

  • 準備新版本發布
  • 最後的測試和 bug 修復
  • 更新版本號和文件

流程:
develop → release → main + develop
5. hotfix 分支(緊急修復)
命名:hotfix/*
例如:hotfix/critical-bug
hotfix/security-patch

用途:

  • 修復正式版本的緊急問題
  • 不影響開發流程

流程:
main → hotfix → main + develop


完整工作流程圖
main ●────────●─────────────●────────────●
\ \ \
\ \ \ hotfix
\ \ release \ │
\ \ │ \ │
develop ─────●────●────●─────●──────●───●───────●
\ \ \ /
\ \ \ feature /
\ \ \ │ /
feature/* ●────●────●──●──●

圖例:
● = commit
─ = 分支線
\ = 分支出去
/ = 合併回來


實戰操作步驟
步驟1:初始化 Git Flow
建立專案結構:

建立專案

mkdir git-flow-demo
cd git-flow-demo
git init

建立初始內容

echo "# Git Flow 示範專案" > README.md
echo "version: 0.1.0" > VERSION
git add .
git commit -m "init: 初始化專案"

建立 develop 分支

git branch develop
git checkout develop

推送到遠端

git remote add origin https://github.com/你的帳號/git-flow-demo.git
git push -u origin main
git push -u origin develop
步驟2:功能開發流程
開發新功能:

從 develop 建立 feature 分支

git checkout develop
git checkout -b feature/user-authentication

開發功能

echo "# 使用者認證模組" > auth.js
echo "function login() {}" >> auth.js
git add auth.js
git commit -m "feat: 新增登入功能"

echo "function register() {}" >> auth.js
git add auth.js
git commit -m "feat: 新增註冊功能"

echo "function logout() {}" >> auth.js
git add auth.js
git commit -m "feat: 新增登出功能"

推送功能分支

git push origin feature/user-authentication
完成功能,合併回 develop:

切換到 develop

git checkout develop

合併 feature 分支

git merge --no-ff feature/user-authentication -m "Merge feature/user-authentication into develop"

推送 develop

git push origin develop

刪除 feature 分支(本地和遠端)

git branch -d feature/user-authentication
git push origin --delete feature/user-authentication
步驟3:發布流程
準備發布:

從 develop 建立 release 分支

git checkout develop
git checkout -b release/1.0.0

更新版本號

echo "version: 1.0.0" > VERSION
git add VERSION
git commit -m "chore: 更新版本號為 1.0.0"

準備發布說明

cat > CHANGELOG.md << 'EOF'

更新日誌

[1.0.0] - 2024-03-20

新增

  • 使用者認證功能
    • 登入
    • 註冊
    • 登出

改進

  • 優化使用者體驗
  • 提升安全性

修復

  • 修正已知問題
    EOF

git add CHANGELOG.md
git commit -m "docs: 新增 1.0.0 版本更新日誌"

推送 release 分支

git push origin release/1.0.0
完成發布:

合併到 main(正式發布)

git checkout main
git merge --no-ff release/1.0.0 -m "Release version 1.0.0"
git tag -a v1.0.0 -m "Release version 1.0.0

新功能:

  • 完整的使用者認證系統
  • 登入、註冊、登出功能

技術改進:

  • 安全性提升
  • 效能優化"

git push origin main
git push origin v1.0.0

合併回 develop

git checkout develop
git merge --no-ff release/1.0.0 -m "Merge release/1.0.0 back into develop"
git push origin develop

刪除 release 分支

git branch -d release/1.0.0
git push origin --delete release/1.0.0
步驟4:緊急修復流程
發現線上問題:

從 main 建立 hotfix 分支

git checkout main
git checkout -b hotfix/security-patch

修復問題

echo "// 安全性修補" >> auth.js
echo "function validateInput() {}" >> auth.js
git add auth.js
git commit -m "fix: 修復安全漏洞"

更新版本號(修訂版本)

echo "version: 1.0.1" > VERSION
git add VERSION
git commit -m "chore: 更新版本號為 1.0.1"

推送 hotfix 分支

git push origin hotfix/security-patch
完成緊急修復:

合併到 main

git checkout main
git merge --no-ff hotfix/security-patch -m "Hotfix: 安全性修補 v1.0.1"
git tag -a v1.0.1 -m "Hotfix version 1.0.1 - Security patch"
git push origin main
git push origin v1.0.1

合併回 develop

git checkout develop
git merge --no-ff hotfix/security-patch -m "Merge hotfix/security-patch into develop"
git push origin develop

刪除 hotfix 分支

git branch -d hotfix/security-patch
git push origin --delete hotfix/security-patch


其他流程策略
GitHub Flow(簡化版)
特點:

  • 只有 main 分支
  • 所有開發從 main 分支出來
  • 完成後透過 PR 合併回 main
  • 適合持續部署

流程:
main → feature → PR → main

優點:
✅ 簡單易懂
✅ 適合快速迭代
✅ 適合小團隊

缺點:
❌ 沒有 staging 環境
❌ 不適合複雜版本管理
GitHub Flow 實作:

建立功能分支

git checkout main
git checkout -b feature/new-function

開發...

git commit -m "feat: 新功能"

推送並建立 PR

git push origin feature/new-function

在 GitHub 建立 Pull Request

合併後刪除分支

git checkout main
git pull origin main
git branch -d feature/new-function
GitLab Flow(混合版)
特點:

  • main 分支為主
  • 有 production 分支對應生產環境
  • 有多個環境分支

分支結構:
main → staging → production

優點:
✅ 環境對應清楚
✅ 適合多環境部署
✅ 兼顧開發和發布

適用:

  • 需要多環境測試
  • 企業級應用
    Trunk-Based Development(主幹開發)
    特點:
  • 所有人在主分支開發
  • 使用 feature flags 控制功能
  • 非常頻繁的整合

優點:
✅ 減少合併衝突
✅ 快速持續整合
✅ 適合高頻部署

缺點:
❌ 需要 feature flags 支援
❌ 需要強大的 CI/CD
❌ 團隊技術要求高


選擇適合的工作流程
決策指南:
小型專案(1-3人):
→ GitHub Flow
簡單快速,容易上手

中型專案(4-10人):
→ Git Flow 或 GitLab Flow
結構清晰,適合協作

大型專案(10+人):
→ Git Flow + 自訂規則
嚴格管控,品質保證

持續部署專案:
→ GitHub Flow 或 Trunk-Based
快速迭代,自動化部署


Git Flow 最佳實踐
✅ 分支命名規範:
feature/功能名稱
feature/user-login
feature/payment-integration

release/版本號
release/1.0.0
release/2.1.0

hotfix/問題描述
hotfix/critical-bug
hotfix/security-fix
✅ Commit 訊息規範:
feat: 新功能
fix: 修復 bug
docs: 文件更新
style: 格式調整
refactor: 重構
test: 測試
chore: 雜項
✅ 合併策略:

使用 --no-ff 保留分支歷史

git merge --no-ff feature/xxx

優點:

  • 保留完整的開發歷史
  • 容易追蹤功能
  • 可以輕易 revert 整個功能
    ✅ 版本號規則(語義化版本):
    主版本號.次版本號.修訂號
    1 . 2 . 3

1.0.0 → 首次正式發布
1.1.0 → 新增功能(向後相容)
1.1.1 → Bug 修復
2.0.0 → 重大更新(可能不相容)


實戰檢查清單
開發新功能:
□ 從 develop 建立 feature 分支
□ 分支命名符合規範
□ 開發過程多次 commit
□ 完成後合併回 develop
□ 刪除 feature 分支
□ 推送更新
準備發布:
□ 從 develop 建立 release 分支
□ 更新版本號
□ 撰寫 CHANGELOG
□ 最後測試和 bug 修復
□ 合併到 main 並打 tag
□ 合併回 develop
□ 刪除 release 分支
緊急修復:
□ 從 main 建立 hotfix 分支
□ 快速修復問題
□ 更新版本號(修訂號+1)
□ 合併到 main 並打 tag
□ 合併回 develop
□ 刪除 hotfix 分支


今日重點回顧
• ✅ 理解 Git Flow 的完整結構
• ✅ 掌握各種分支的用途和流程
• ✅ 學會完整的發布流程
• ✅ 了解不同工作流程的適用場景
核心概念總結
Git Flow 五種分支:
main - 正式版本(長期)
develop - 開發版本(長期)
feature - 功能開發(臨時)
release - 發布準備(臨時)
hotfix - 緊急修復(臨時)

流程方向:
功能開發:develop → feature → develop
版本發布:develop → release → main + develop
緊急修復:main → hotfix → main + develop


上一篇
Day 21:第三週實戰演練 - 進階技能整合
系列文
30天 Git 版本控制實戰筆記22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言