---
# System prepended metadata

title: Git 合併規範與 Nx Monorepo 最佳實踐
tags: [monorepo]

---

# Git 合併規範與 Nx Monorepo 最佳實踐
## 核心原則：維持線性歷史 (Linear History)
為了確保 Nx 的 affected 指令能精確計算受影響範圍，並極大化 CI/CD 效能，本專案強制執行線性歷史。

### 規範細則
1. 禁止使用 Plain Merge (普通合併)
不允許產生「Merge branch '...' into 'main'」的合併提交。
理由：非線性歷史會導致 nx affected 判定基準模糊。
後果：當歷史紀錄混亂時，Nx 可能會因無法精確比對而觸發全量編譯，降低部署效率。

1. 推薦合併方式
Squash Merge：將 PR 中的所有提交合併為一個乾淨的提交。
Rebase and Fast-forward：維持提交的獨立性，但重定位於主幹最新點。

1. 合併前同步要求
必須執行 Rebase：在合併 PR 之前，開發者必須先執行 rebase 同步主幹（main）最新代碼。
目的：解決「過時測試 (Stale Tests)」問題，確保程式碼是在與最新環境整合的狀態下通過測試。

### 為什麼這很重要？
* 精準分析：確保 nx affected 指令只針對真正有變動的部分執行任務，節省 CI 資源。
* 穩定主線：強制先 Rebase 再合併，可確保所有併入主線的代碼都已經過最新的整合驗證，避免破壞主幹穩定性。