Skip to content

Làm thẳng trên main ​

Từ 18.10.2026 mọi repo của Nemo12 làm theo kiểu trunk-based: không PR, không branch dài hạn, code đã kiểm thì push thẳng lên main và CI deploy trong vài phút.

Luồng của một thay đổi ​

bash
git commit -m "..."              # pre-commit: lint + typecheck file đã stage + cổng khớp đường dẫn (~2-4 s)
git pull --rebase origin main    # lấy commit của phiên khác
git push origin HEAD:main        # pre-push: typecheck + unit test workspace bị đụng (~15 s)

Sau khi push, CI trên main (một job) chạy lại cổng rồi deploy đúng các app bị đụng. CI đỏ thì không deploy, và workflow auto-revert tự hoàn nguyên commit đỏ.

  • Push bị từ chối ([rejected] ... fetch first): một phiên khác vừa push. Chạy lại git pull --rebase rồi push.
  • Xung đột khi rebase: chỉ xảy ra khi hai phiên sửa cùng dòng. Gỡ trong cây của mình, chạy lại test, push.
  • Tính năng làm dở: đẩy lên main sau một feature flag (cờ bật tắt, tiền lệ PARTNERS_ENABLED), không giữ trên branch.
  • Trong worktree: làm trên một nhánh tạm ở máy (git không cho hai worktree cùng checkout main) và push HEAD:main. Nhánh tạm không lên GitHub.

Vì sao không giữ 3 branch (ielts, sat, speaking) ​

Thẳng lên main3 branch dài hạn
Code lên productionVài phút sau mỗi pushChỉ khi merge branch về main
MergeGần như không có: rebase nhỏ, liên tụcMerge lớn, càng để lâu càng đau
Xung độtHiếm, nhỏThường xuyên, vì ba program chung apps/learn, API, D1
Migration D1Một dãy số, áp ngayBa branch thêm migration song song vào một database
Sửa code chungMọi program nhận ngayPhải sửa ba lần hoặc cherry-pick

Repo đã gặp thật: một branch cũ 10 ngày khi merge đã xoá khoảng 170.000 dòng. Thứ thay cho "cô lập bằng branch" là feature flag, và về lâu dài là mỗi program một app.

Đã gỡ gì ​

Trunk guard ngày 13.10.2026 (npm run land, nhánh ready/*, gộp mỗi đêm, chặn git push ... main) đã gỡ. npm run nightly (23:00, LaunchAgent trên Mac) nay chỉ kiểm main: chạy cổng báo cáo và 10% E2E quan trọng nhất, đỏ thì hiện thông báo.