ไม่มีชื่อบทความ
แน่นอนจ้ะ! ด้านล่างคือบทความหัวข้อ “Git Commit Guidelines สำหรับโปรเจกต์ Monorepo” เขียนให้พร้อมนำไปใช้ในเอกสารทีมได้ทันที:
Git Commit Guidelines สำหรับโปรเจกต์ Monorepo
เพื่อให้ทีมสามารถทำงานร่วมกันได้อย่างราบรื่น และเข้าใจว่าแต่ละ commit มีผลกับส่วนไหนของระบบ เราจึงใช้มาตรฐานการเขียน commit message แบบ Conventional Commits ที่ปรับให้เหมาะกับโครงสร้าง Monorepo
โครงสร้างข้อความ Commit
<type>(<workspace>/<project>): <ข้อความสั้น ๆ>
ตัวอย่างที่ถูกต้อง:
feat(apps/gohig): เพิ่มหน้าลงเวลาเข้า-ออกงานfix(packages/ui): แก้ปุ่ม Save ซ้ำสองครั้งrefactor(scripts/rename-files): เปลี่ยน logic ให้เป็น asyncchore: เปลี่ยนเวอร์ชัน Turbo
workspaceคือ apps / packages / scripts / rootprojectคือชื่อโฟลเดอร์ เช่น gohig, ui, rename-files
ประเภทของ Commit (type)
| type | ใช้เมื่อ... |
|---|---|
feat |
เพิ่มฟีเจอร์ใหม่ |
fix |
แก้บั๊ก |
docs |
แก้ไขเอกสารหรือเพิ่มเอกสารใหม่ |
style |
แก้ฟอร์แมต, indent, white space |
refactor |
ปรับโครงสร้างโค้ดโดยไม่เปลี่ยนพฤติกรรม |
perf |
ปรับปรุงประสิทธิภาพ |
test |
เพิ่มหรือแก้ไขเทส |
build |
เปลี่ยนการตั้งค่าการ build หรือ dependency |
ci |
แก้การตั้งค่า pipeline เช่น GitHub Actions |
chore |
งานทั่วไปที่ไม่เข้ากลุ่มข้างต้น เช่น bump version |
revert |
ย้อนกลับ commit ก่อนหน้า |
ข้อแนะนำเพิ่มเติม
ความยาวข้อความ (หลัง
:) ไม่ควรเกิน 72 ตัวอักษรอย่าใช้ข้อความคลุมเครือ เช่น
update,fix bugโดยไม่ระบุว่าแก้อะไรถ้ามี breaking change ให้ใส่
!เช่น:refactor(packages/lib-posts)!: เปลี่ยน signature ฟังก์ชัน parse()
วิธีแก้ข้อความ Commit ที่เพิ่ง commit ไป
กรณียังไม่ push:
git commit --amend
หรือ:
git commit --amend -m "feat(apps/gohig): ปรับ UI หน้าแดชบอร์ด"
ถ้า push ไปแล้ว:
- ใช้แบบนี้ (อันตรายถ้ามีคนอื่นใช้ branch เดียวกัน):
git commit --amend -m "ข้อความใหม่"
git push --force
- หรือแบบปลอดภัยกว่า (ใช้ commit ใหม่แก้ commit ก่อนหน้า):
git commit -m "fix(commit): แก้ข้อความ commit ก่อนหน้าให้ตรง format"
การใช้ git cz เพื่อช่วยเขียน Commit
ติดตั้งไว้แล้วในโปรเจกต์นี้:
git cz
จะมี UI ถาม type, scope, และข้อความ commit อย่างเป็นระบบ หากจะแก้ commit ล่าสุดด้วย UI:
git cz --amend
Tip: สามารถตั้ง alias ให้สั้นลงได้ เช่น
git config --global alias.cz '!npx cz'
ตัวอย่างที่ผิด (ควรหลีกเลี่ยง)
update: เพิ่มปุ่มแก้บั๊กในหน้าแรกfix UIMerge branch main(ถ้าเปิด squash merge จะไม่เจอ)
สรุป
การใช้ commit message ที่ดี ไม่ได้มีไว้เพื่อตรวจสอบเท่านั้น แต่ช่วยให้ทีมทำงานร่วมกันได้อย่างมีระบบ สื่อสารเข้าใจตรงกัน และใช้งานร่วมกับเครื่องมืออัตโนมัติ (CI/CD, release note generator) ได้เต็มที่
อย่าลืมว่า commit ที่ดี คือจุดเริ่มต้นของซอฟต์แวร์ที่ maintain ได้ 🎯
ถ้าต้องการรวม guideline นี้กับการตั้งค่า commitlint, cz, และ husky ทั้งระบบก็สามารถทำต่อได้ทันทีจ้ะ ✅