GitFlow搭配GitLab MR實作

  • 65
  • 0
  • Git
  • 2025-03-14

Gitflow 流程示範

引入Giflow模式套用在Gitlab

主要因應工作上,協作流程,重新回溫一下整個GitFlow流程與情境。

分支解說

長期分支 - master 分支、develop 分支

原因:因 Master 與 Develop 分支會一直存活在整個 Git flow 裡,並不會被刪除掉。

短期分支 - hotfix 分支、release 分支、feature 分支

原因:當完成專案後,這些更新的版本都會被合併進 Master 或 Develop 分支 ,之後就會被刪除掉。

git init --initial-branch=main
git remote add origin git@gitlab.com:bda605/gitflowdemo.git
git add .
git commit -m "Initial commit"
git push -u origin main
第一步:
取得https://gitlab.com/your-username/your-repo.git
第二步:
git clone https://gitlab.com/your-username/your-repo.git
cd your-repo
git flow init
第三步驟:
git checkout -b develop
git push -u origin develop

在 GitLab 設定保護 (Protected Branches) 以符合 Gitflow:

  1. 前往 GitLab 專案 → SettingsRepository
  2. 設定保護分支
    • main 只能由 管理員特定角色 合併
    • develop 只能透過 Merge Request (MR) 合併
    • release/*hotfix/*feature/* 允許開發者提交,但仍需 MR

開發Feature流程

# 開發新功能分支並提交遠端
git flow feature start feature-hello
git push -u origin feature/feature-hello
# 開發完成後並提交到遠端
git add .
git commit -m "[FEATURE] 供單編號:001-追加hello訊息"
git push origin feature/feature-hello

在 GitLab 建立 Merge Request (MR)

  • 前往 GitLab專案Merge Requests
  • 選擇 feature/feature-hello 合併到 develop
  • 提交 MR,請求 Code Review
  • 通過 Review 後合併

完成後,最後再重新取develop版本

git checkout develop
git pull origin develop   

註記:在開發過程中有develop新版本的時候


# 取develop從遠端最新版本轉入本機端的develop版本
git checkout develop 
git pull origin develop
git checkout feature/feature-hello
git merge develop

# 底下遇到衝突、解決衝突就要提交一版
git add .
git commit -m "Merge latest develop into feature/feature-hello"
git push origin feature/feature-hello                                      # 推送 Feature 分支
# 在 GitLab 建立 Merge Request (MR) → `feature/feature-login` → `develop`

完成後,取新版develop並刪除Feature分支


git checkout develop  # 切回 develop
git pull origin develop  # 確保 develop 是最新的
git branch -d feature/feature-login  # 刪除本機 feature 分支
git push origin --delete feature/feature-login  # 刪除遠端 feature 分支

遇到衝突的情境

# 放棄這次的合併
git merge --abort

在開發過程遇到衝突

一、處理衝突,解決衝突

二、先放棄merge  先commit一版你的程式(合併前),在本機commit一版之後再清除你的程式(因為commit可以知道你上一版改了那些程式),把Develop分支合併進來,處理完衝突之後,再提交一版,再透過歷史紀錄,自己開發的併入到自己新版的develop分支

三、先從develop開新的分支,來解決衝突。例如你的分支是feat-001那就多開一個feat-001-1取到develop版本程式,再把feat-001程式和develop差異找出來,再用feat-001-1的develop內容合併。

釋出Release

git checkout develop
git pull origin develop                     # 確保 develop 是最新的
git flow release start 1.0.0                # 建立 release/1.0.0 分支
git push -u origin release/1.0.0            # 推送到遠端

修正 Release 分支的 Bug

git add .
git commit -m "[RELEASE] Fix minor bugs before release"
git push origin release/1.0.0

在 GitLab 建立 Merge Request

在 GitLab 建立 MR

  • release/1.0.0main
  • 標註「準備發布」
  • 進行 Code Review
  • CI/CD 可以自動部署到 Staging 或 Production

合併 Release 分支

在 GitLab 通過 Review 並合併 release/1.0.0main

開發過程修正Release部分

接下來,我們還需要把 release/1.0.0 的變更同步回 develop,以確保 develop 也包含所有修正:

git checkout develop
git pull origin develop  # 確保 develop 是最新的
git merge --no-ff release/1.0.0  # 把 Release 變更合併到 develop
git push origin develop  # 推送最新的 develop

建立 Release Tag

git checkout main
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0  # 推送 Tag

刪除 Release 分支

# 刪除本機分支git 
git branch -d release/1.0.0
# 刪除遠端分支
git push origin --delete release/1.0.0

 

修bug狀況

git checkout main
git pull origin main
git flow hotfix start hotfix-1.0.1
git push -u origin hotfix/hotfix-1.0.1
# 修正好bug
git add .
git commit -m "[HOTFIX] 修正生產環境錯誤"
git push origin hotfix/hotfix-1.0.1

建立 MR,請求 Code Review

  1. 在 GitLab 建立 Merge Request (MR)
    • hotfix/hotfix-1.0.1main
  2. 進行 Code Review,通過後合併
  3. CI/CD 立即部署到 Production
# 同步develop
git checkout develop
git pull origin develop
git merge --no-ff hotfix/hotfix-1.0.1
git push origin develop

# 建立Hotfix Tag
git checkout main
git tag -a v1.0.1 -m "Hotfix version 1.0.1"
git push origin v1.0.1

# 刪除hotfix
git branch -d hotfix/hotfix-1.0.1
git push origin --delete hotfix/hotfix-1.0.1

以上是透過HelloWorld的程式來回溫整個GitFlow流程。

 

元哥的筆記