# 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 再合併,可確保所有併入主線的代碼都已經過最新的整合驗證,避免破壞主幹穩定性。