ที่มา: dev.to
เพื่อให้การทำงานเป็นทีมมีประสิทธิภาพมากขึ้น เราควรใส่ใจกับ Commit Message ของ Git บล็อกนี้นำเสนอรูปแบบหนึ่งสำหรับ Commit Messageของ Git ที่น่าสนใจ
รูปแบบของ Commit Message
!type(?scope): !subject
❗คือ บังคับว่าต้องมี
❓คือ มีหรือไม่มี ก็ได้
Type
- ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject
Type บอกว่าการเปลี่ยนแปลงนี้ทำเกี่ยวกับอะไร โดยมี Types ให้เลือก ดังนี้
- test
- สร้างหรือเปลี่ยนแปลง Test Code
- feature
- เพิ่ม Feature ใหม่ สำหรับ Project
- ในบทความเค้าใช้ feat
- แต่ผมคิดว่า feat ไม่สื่อความหมาย และไม่รู้จะย่อทำไม
- refactor
- ทำ Code Refactoring โดยไม่กระทบกับ Logic หรือ Rules
- style
- เมื่อมีการเปลี่ยน Code Style หรือมีการ Formatting Code
- fix
- แก้ Error หรือ Bugs ในระบบ
- docs
- เปลี่ยนแปลง Document ของ Project
- chore
- มีการเปลี่ยนแปลงที่ไม่เกี่ยวกับ Code หรือ Test
- เป็นการเปลี่ยนแปลงด้าน Development Dependency หรือ Tools เช่น
- eslint
- prettier
- .gitignore
- build
- มีการเปลี่ยนแปลงที่ส่งผลต่อ Build Process หรือ External Dependency
- เปลี่ยนแปลง Dependency ของ Project
- perf
- การเปลี่ยนแปลงที่เกี่ยวข้องกับการเพิ่ม Performance ของระบบ
- ci
- เปลี่ยนแปลง CI/CD Configuration File เช่น
- Circle
- Travis
- Jenkins
- เปลี่ยนแปลง CI/CD Configuration File เช่น
- revert
- มีการย้อยกลับไปที่ Commit ก่อนหน้านี้
📝 Notes (เกี่ยวกับ Type)
- ใน Commit message ต้องมี Type เสมอ
- ต้องมีแค่ 1 Type ต่อ 1 Commit
- ถ้าไม่รู้จะใช้ Type ใด เป็นไปได้ว่า Commit ใหญ่เกินไป
- ควรแยก Commit ให้เล็กพอที่จะเลือก Type ได้
- และแต่ละ Commit ต้องเป็นการเปลี่ยนแปลงเพียงเรื่องเดียว
Subject
- ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject
Subject ต้องใช้ประโยคที่ขึ้นต้นด้วย Verb.1 (โดยไม่มี to) แทนที่จะเป็น Past Tense
เพื่อบอกทีมว่า commit นี้จะทำอะไร ถ้าเรา apply มัน:
If applied, this commit will do something according to this message
เปรียบเทียบ 2 commit message นี้ดู

จะเห็นว่า
“If applied, this commit will change the markup” ✅, ดู make sense กว่า
“If applied, this commit will changed the markup” 🟥
Scope
- ❓ มีหรือไม่มี ก็ได้
- บอก Context หรือบริบทของ Commit นี้
จากรูปแบบ Commit Message :
!type(?scope): !subject
จากรูปแบบที่เขียนมาก่อนหน้านี้ เราจัดการ Commit Message ให้ชัดเจนด้วยการใช้
- Type บอกประเภทของการเปลี่ยนใน Commit นี้
- Subject บอกอย่างชัดเจนว่าจะเกิดอะไรขึ้น เมื่อ Apply Commit นี้
แม้ว่า Scope ไม่จำเป็นต้องมีก็ได้ แต่มันช่วยบอก Context ของ Commit นี้เพิ่มเติมได้
และยังช่วยลดภาระของ Subject ลงได้ ทำให้ Subject สั้นและกระชับกว่าเดิม
หมายเหตุ :
- Scope ต้องใส่ใน “วงเล็บ” เช่น (Scope) เสมอ
- Scope จะถูกแบ่งแยกด้วย “/” (Slash) ได้ เช่น
- (module/AuthService)
- (package/PackageName)
ตัวอย่าง
