如何開發並提交 Merge Request

在 GitLab 中,Merge Request(合併請求,簡稱 MR) 是協作開發的核心流程,它允許開發者將某個分支的變更請求合併進主要分支(如 main / develop),並經過審查與測試。


✅ 什麼是 Merge Request?

Merge Request(MR)= 你對一個 GitLab 儲存庫提出的「我要合併某個分支變更」的請求。

你可以在 MR 中:

  • 查看差異(diff)
  • 請其他人 Code Review
  • 與 CI/CD 整合,自動測試
  • 綁定 Issue、自動關閉任務

📦 完整流程:開發 + 提交 Merge Request


🎯 範例情境:

你要在 GitLab 上新增一個功能,並透過 Merge Request 合併到 main 分支。


✅ 步驟一:從主分支切出新分支

可用 GUI(如 PyCharm)或終端機:

git checkout main          # 切回主分支
git pull                   # 確保是最新的
git checkout -b feature/my-new-feature

✅ 步驟二:開發、提交變更(Commit)

  1. 編輯檔案
  2. 提交變更:
    git add .
    git commit -m "新增:XXX 功能"
    

✅ 步驟三:推送分支到 GitLab

git push origin feature/my-new-feature

📝 第一次推送會建立該分支於 GitLab 上,GitLab 通常會主動提示你建立 Merge Request。


✅ 步驟四:建立 Merge Request(有兩種方式)


🔹 方法一:透過 GitLab 網站建立

  1. 登入你的 GitLab 專案頁面
  2. GitLab 通常會出現提示:
    A new branch was pushed: feature/my-new-feature → Create Merge Request
    

    點下去建立 MR

  3. 填寫 Merge Request 表單:
    • Source branch(來源)feature/my-new-feature
    • Target branch(目標)maindevelop
    • 標題(Title):簡述你做了什麼
    • 描述(Description):可附上 Issue、測試方式、影響範圍等
    • Reviewer / Assignee:選擇負責 Code Review 的同事
  4. 點選 Create Merge Request

🔹 方法二:使用命令列(可選)

若你已安裝 GitLab CLI 工具(如 glab):

glab mr create --source feature/my-new-feature --target main --title "新增 XXX 功能"

✅ 步驟五:等待 Code Review 或測試通過

若你開啟了:

  • ✅ 自動化測試(CI/CD Pipeline)
  • ✅ 合併條件(如至少一人 Approve)

你可在 MR 頁面查看進度與審查狀況。


✅ 步驟六:合併 Merge Request(Merge)

若你有權限:

  • 點擊「Merge」按鈕
  • 可選:
    • Squash commits:合併成一筆 Commit(整潔)
    • Delete source branch:合併後自動刪除分支

🔒 常見 Merge Request 設定(由維護者設置)

設定項目說明
Protected Branches限制誰可以對 main/develop 合併
Require Approvals設定需幾位 Reviewer 通過才可合併
CI/CD Pipelines要求測試成功才能合併
Autoclose Issues在 MR 描述中寫 Closes #123 自動關閉議題

📌 小技巧與習慣建議

習慣建議做法
分支命名feature/xxxbugfix/xxxhotfix/xxx
Commit 訊息風格遵循語義化,例如 feat:fix:docs:
MR 描述模板可在 GitLab 專案中設定 .gitlab/merge_request_templates/
與 Issue 關聯在 MR 描述中寫 Closes #issue編號

🧪 常見問題與解法

問題解法
Merge Request 建立後找不到按鈕合併看是否缺少 Approve / CI 測試未通過
推送新分支出現錯誤確認是否已綁定遠端、權限是否足夠
無法推送(非 fast-forward)本地分支過時,請 git pull --rebase 後再 push
想要重寫歷史(e.g. squash)使用 git rebase -i + force push

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *