Categories
การพัฒนาซอฟท์แวร์

รูปแบบ Commit Message ของ Git ที่น่าสนใจ

ที่มา: dev.to

เพื่อให้การทำงานเป็นทีมมีประสิทธิภาพมากขึ้น เราควรใส่ใจกับ Commit Message ของ Git

เพราะ Commit Message ช่วยในการสื่อสารกับเพื่อนร่วมทีม หรือแม้แต่เป็นการสื่อสารกับตัวเราเองในอนาคต เพื่อให้รู้ว่ามีการเปลี่ยนแปลงอะไรบ้าง จะเกิดผลกระทบอะไรบ้าง

บล็อกนี้นำเสนอรูปแบบหนึ่งสำหรับ Commit Messageของ Git ที่น่าสนใจ

รูปแบบของ Commit Message

!type(?scope): !subject

❗คือ บังคับว่าต้องมี
❓คือ มีหรือไม่มี ก็ได้


Type

  • ❗ต้องมีเสมอ
จากรูปแบบ Commit Message :
!type(?scope): !subject

Type บอกว่าการเปลี่ยนแปลงนี้ทำเกี่ยวกับอะไร โดยมี Types ให้เลือก ดังนี้

  • test
    • สร้างหรือเปลี่ยนแปลง Test Code
  • feat
    • เพิ่ม Feature ใหม่ สำหรับ Project
  • 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
  • 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 นี้ดู

ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Subject ใน Commit Message ของ Git

จะเห็นว่า

If applied, this commit will change the markup ✅, ดู make sense กว่า

“If applied, this commit will changed the markup” 🟥

นอกจากนี้การเขียน Subject ควรเขียนสั้น ๆ กระชับ โดยทั่วไปไม่ควรเกิน 50 ตัวอักษร ถ้าต้องการเขียนยาวกว่านี้ให้ไปเขียนใน Body ของการ Commit


Scope

  • ❓ มีหรือไม่มี ก็ได้
  • บอก Context หรือบริบทของ Commit นี้

จากรูปแบบ Commit Message :

!type(?scope): !subject

จากรูปแบบที่เขียนมาก่อนหน้านี้ เราจัดการ Commit Message ให้ชัดเจนด้วยการใช้

  • Type บอกประเภทของการเปลี่ยนใน Commit นี้
  • Subject บอกอย่างชัดเจนว่าจะเกิดอะไรขึ้น เมื่อ Apply Commit นี้

แม้ว่า Scope ไม่จำเป็นต้องมีก็ได้ แต่มันช่วยบอก Context ของ Commit นี้เพิ่มเติมได้

และยังช่วยลดภาระของ Subject ลงได้ ทำให้ Subject สั้นและกระชับกว่าเดิม

หมายเหตุ :

  1. Scope ต้องใส่ใน “วงเล็บ” เช่น (Scope) เสมอ
  2. Scope จะถูกแบ่งแยกด้วย “/” (Slash) ได้ เช่น
    • (module/AuthService)
    • (package/PackageName)

ตัวอย่าง

ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git
ตัวอย่าง: การใช้ Scope ใน Commit Message ของ Git

แนวปฏิบัติเพิ่มเติมเพื่อการ Commit ที่ดี

  • Commit บ่อย ๆ และ เล็ก ๆ
    • ช่วยให้การ review code ง่ายขึ้น
    • ช่วยให้ย้อนกลับไปยังจุดที่ต้องการได้ง่าย
    • ช่วยให้การ merge ง่ายขึ้น เพราะเมื่อเกิด merge conflict จะมี code ไม่มากที่ต้องพิจารณา
    • การเปลี่ยนแปลง code ทีละน้อย ทำให้คุณภาพโค้ดดีขึ้น พัฒนาขึ้นอย่างต่อเนื่อง
  • การเขียน Body ใน Commit
    • เว้น 1 บรรทัดจากหัวข้อ
    • ควรเขียนให้สั้น และกระชับเช่นกัน
    • ควร Wrap ความยาวต่อ 1 บรรทัด ไม่เกิน 72 ตัวอักษร
    • ควรเขียนอธิบายว่าทำอะไร และทำไม (What + Why)
    • ขึ้นต้นประโยคด้วยตัวพิมพ์ใหญ่ และปิดท้ายประโยคด้วยจุด
  • Commit Message เป็นเพียงเครื่องมือหนึ่งในการสื่อสาร ทีมพัฒนาซอฟต์แวร์ยังจำเป็นต้องคุยกัน สื่อสารกันบ่อย ๆ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.