SWR баг — Git ба Merge Request заавар
Branch загвар: GitLab/GitHub Flow · Шалгах түвшин: 1 зөвшөөрөл + ногоон CI · Нэгтгэх арга: Squash
1. Үндсэн зарчим
main= production. Үргэлж тогтвортой, release-д бэлэн. Шууд commit/push байхгүй — зөвхөнstaging-аас release-ээр орно.staging= integration / QA branch. Feature-ууд энд нэгдэж, staging орчинд туршигдана.- Урсгал нэг чиглэлтэй:
feature → staging → main (production). - Бүх өөрчлөлт богино настай branch болон Merge Request (MR)-ээр дамжина.
- Жижиг MR хурдан нэгдэж, сайн хянагдана. Зорилго: ~400 мөрөөс бага зөрүү.
- Нэг MR = нэг логик өөрчлөлт. Хоорондоо хамааралгүй ажлыг нэг дор бүү багцал.
2. Branch үүсгэх (Branching)
Хамгийн сүүлийн staging-аас branch үүсгэнэ (integration branch):
git checkout staging
git pull origin staging
git checkout -b feat/checkout-coupon
Нэрлэх дүрэм: <type>/<short-description>
| Төрөл | Хэрэглээ |
|---|---|
feat/ | шинэ боломж (feature) |
fix/ | алдаа засвар |
refactor/ | бүтэц өөрчлөх, үйлдэл өөрчлөгдөхгүй |
chore/ | хэрэгсэл, dependency, тохиргоо |
docs/ | зөвхөн баримт бичиг |
hotfix/ | production дээрх яаралтай засвар |
Branch богино настай байлга — MR-ийг 1–2 хоногийн дотор нээж, хэдхэн хоногт нэгтгэ. Удаан амьдарсан branch хазайж муудна.
3. Commit-ууд
MR гарчигт Conventional Commits хэлбэрийг ашигла (энэ нь staging дээрх squash хийгдсэн commit болно):
feat(checkout): apply coupon code at payment step
fix(auth): refresh token before expiry
- Гарчиг ≤ 50 тэмдэгт, тушаах хэлбэрээр ("add", "added" биш).
- Тайлбар хэсэгт юу биш яагаад гэдгийг бич — юу хийсэн нь зөрүүнд аль хэдийн харагдана.
- Branch дээрээ олон удаа commit хий; замбараагүй байсан ч хамаагүй — squash цэвэрлэнэ.
4. Merge Request нээх
Push хийгээд MR-ийг эрт нээ (бэлэн биш бол Draft гэж тэмдэглэ):
git push -u origin feat/checkout-coupon
Target branch:
staging(mainбиш). Feature-ууд эхлээд staging руу орж туршигдана.
MR-д дараах мэдээлэл заавал тусгагдсан байна:
- Өөрчлөлтийн зорилго, тайлбар — юуг, яагаад өөрчилсөн.
- Туршилтын үр дүн — ямар тест хийсэн, үр дүн (бүх CI ногоон + гар аргаар шалгасан алхмууд).
- Rollback шаардлага — буцаах боломжтой эсэх, буцаах алхмууд, өгөгдөл/миграцид үзүүлэх нөлөө.
- Холбогдох ticket, issue, task-ийн холбоос —
Closes #123гэх мэт.
Нэмэлт:
- Гарчиг — Conventional Commit хэлбэр (эцсийн commit мессеж энэ болно).
- Дэлгэцийн зураг / бичлэг — UI-д өөрчлөлт орсон бол.
- Өөрийгөө хянах — review хүсэхээсээ өмнө өөрийн зөрүүг уншиж шалга.
MR тайлбарын загвар:
## Зорилго, тайлбар (Purpose)
Юуг, яагаад өөрчилсөн. Асуудал / нөхцөл.
## Туршилтын үр дүн (Test results)
- [ ] Unit / integration тест ногоон
- [ ] Гар аргаар шалгасан: <алхмууд ба үр дүн>
## Rollback шаардлага (Rollback)
- Буцаах боломжтой эсэх: Тийм / Үгүй
- Буцаах алхам: <revert, migration буцаах, feature flag унтраах гэх мэт>
- Эрсдэл / нөлөө: <өгөгдөл, миграц, хамаарал>
## Холбогдох ticket / issue / task (Links)
Closes #___, холбоос: <ticket/issue/task URL>
5. Хяналт ба зөвшөөрөл
Нэгтгэх босго: 1 зөвшөөрөл + бүх CI шалгалт ногоон.
Зохиогч (Author):
- MR-ийг жижиг, төвлөрсөн байлга.
- Бүх сэтгэгдэлд хариул (шийдвэрлэ, эсвэл яагаад шийдээгүйгээ тайлбарла).
- Өөрчлөлт push хийсний дараа дахин review хүс.
Хянагч (Reviewer):
- ~1 ажлын өдрийн дотор хяна. Багийнхаа ажлыг түгжрэлээс гаргах нь өөрийн гүнзгий ажлаас чухал.
- Шалгах зүйл: зөв эсэх, ирмэгийн тохиолдол (edge case), тест, уншигдах байдал, аюулгүй байдал.
- Тодорхой бөгөөд эелдэг бай. Тушаахын оронд санал болго. Блоклохгүй зүйлд
nit:ашигла. - Сайн бол зөвшөөр — хувийн загварын дуршилаар бүү саатуул.
Хэлэлцүүлэг шийдвэрлэх: засагдсаны дараа зохиогч thread-ийг хаана; сэтгэл хангалуун бус бол хянагч дахин нээнэ.
6. Branch-ийг шинэлэг байлгах
staging дээр rebase хийж шинэлэг, цэвэр түүхтэй байлга:
git fetch origin
git rebase origin/staging
# зөрчлийг шийдээд:
git push --force-with-lease
Үргэлж --force-with-lease ашигла (хэзээ ч энгийн --force биш) — энэ нь чиний хараагүй ажлыг дарж бичихээс татгалзана.
7. Нэгтгэх (Merging)
- Арга: Squash merge. Feature branch
stagingдээр нэг commit болж нийлж, MR гарчгаар нэрлэгдэнэ. - Зөвхөн дараах үед нэгтгэ: 1 зөвшөөрөл ✅ + CI ногоон ✅ + thread-ууд шийдэгдсэн ✅ + Rollback хэсэг бөглөгдсөн ✅.
- Зохиогч нэгтгэнэ (бэлэн эсэхийг тэр мэднэ), баг өөрөөр тохиролцоогүй бол.
- Нэгтгэсний дараа branch-ийг устга (auto-delete-ийг асаа).
stagingнь CD pipeline-ийн дагуу staging орчинд дахин deploy хийгдэж, QA шалгана.
8. Орчны урсгал — staging ба production
Зөвхөн хоёр орчны branch: staging (QA) ба main (production). Production-ийн тусдаа branch байхгүй — main нь өөрөө production.
| Branch | Орчин | Хэзээ deploy |
|---|---|---|
staging | staging (QA) | feature MR нэгтгэх бүрт |
main | production | staging → main release нэгтгэхэд |
Урсгал:
- feature → MR →
staging(squash). staging орчинд deploy → QA шалгана. - staging дээр баталгаажсаны дараа release:
staging→mainMR нээж нэгтгэнэ → production deploy. - Release бүрт
mainдээр tag тавина.
# Release: staging → main (production)
git checkout main && git pull
git merge --no-ff origin/staging # эсвэл GitLab дээр MR-ээр (зөвлөмж)
git tag -a v1.4.0 -m "release v1.4.0"
git push origin main --tags
Дүрэм:
- Кодыг зөвхөн дээш урсга (
feature → staging → main).mainруу шууд feature нэгтгэж болохгүй — зөвхөнstaging-аас release-ээр орно. - Release нэгтгэлд (
staging → main) merge commit (--no-ff) ашигла — squash биш. Ингэснээр аль commit production-д очсон түүх хадгалагдана. staging,main-г protected branch болго: шууд push байхгүй, MR заавал, 1 зөвшөөрөл.- production (
main) руу нэгтгэх бүрт release tag (v1.4.0) тавь.
9. Hotfix (яаралтай засвар)
Production дээрх яаралтай алдааг засахдаа staging-ийг тойрч, main-аас шууд салаална:
git checkout -b hotfix/payment-timeout main
# зас, push, MR нээ → main
- Мөн адил CI ногоон + 1 зөвшөөрөл шаардлагатай (боломжтой хэн нэгнийг ав).
mainруу нэгтгэ, deploy хий, production дээр баталгаажуул, release tag тавь.- Чухал: засварыг алдахгүйн тулд
main-г буцаажstagingруу нэгтгэ — эс бөгөөс дараагийн release дээр алга болно.
10. CI хаалт (нэгтгэхээс өмнө заавал)
staging ба main дээр branch protection тохируулж, эдгээрийг нэгтгэхийг блоклодог болго:
- ✅ Lint / format
- ✅ Unit + integration тест
- ✅ Build
- ✅ Хамгийн багадаа 1 зөвшөөрөл
- ✅ Branch нь target-тайгаа (
staging/main) шинэлэг (up to date)
staging, main-г хамгаал: шууд push байхгүй, force-push байхгүй, MR заавал.
11. Хурдан лавлах
# эхлэх (staging-аас)
git checkout staging && git pull
git checkout -b feat/thing
# ажиллах
git add -p && git commit -m "wip"
# шинэлэг байлгах
git fetch origin && git rebase origin/staging
git push --force-with-lease
# нэгтгэх (target = staging)
git push -u origin feat/thing # MR → staging → review → squash merge → branch устга
# release (staging → main = production)
git checkout main && git merge --no-ff origin/staging
git tag -a v1.4.0 -m "release v1.4.0" && git push origin main --tags
Хийх (Do)
- Жижиг, төвлөрсөн MR · тодорхой гарчиг · хурдан review ·
--force-with-lease
Бүү хий (Don't)
main-д push · хамааралгүй өөрчлөлт багцлах · улаан CI нэгтгэх · энгийнgit push --force· branch-ийг хуучруулах