Senior Engineers Correct These 7 Git Mistakes
03-Apr-26
คัมภีร์เทพ IT
See the original english version Click here!
Git เป็นเครื่องมือสำคัญที่ Developer ใช้งานทุกวัน แต่การใช้งานที่ไม่เหมาะสม เช่น การ Force Push โดยไม่ระวัง หรือการทำงานบน Branch หลักโดยตรง อาจทำให้ Workflow ของทีมยุ่งยากโดยไม่จำเป็น บทความนี้จะพาไปดู 7 ความผิดพลาดในการใช้ Git ที่ควรหลีกเลี่ยง เพื่อปรับ Workflow ให้ดีขึ้น
1. การใช้ Force Push อย่างไม่ระวัง
เมื่อการเขียนทับ History กลายเป็นปัญหา
สิ่งที่เกิดขึ้น:
คุณใช้คำสั่ง git push --force (หรือ git push -f) เพื่อเขียนทับ Remote History หลังจากที่คุณทำการ Rebase หรือแก้ไข Commit ในเครื่อง
ทำไมถึงเป็นปัญหา:
- สร้างคามเสียหายต่องานของเพื่อนร่วมงาน: หากมีคนอื่นพัฒนางานต่อจาก Commit เดิม Branch ของพวกเขาอาจกลายเป็น Branch ที่ไม่เชื่อมต่อกับ History เดิม
- สร้างความไม่สอดคล้องกันใน Repository: อาจทำให้เกิดปัญหา "Divergent Branch" ที่ทำให้สับสน
- กำจัดระบบป้องกัน: โดยทั่วไปแล้ว Remote Branches ควรเป็น History ที่ไม่สามารถเปลี่ยนแปลงได้
วิธีแก้ไข:

แนวทางป้องกัน:
- ตั้งค่า --force-with-lease เป็นค่า Default
- พิจารณาเปิดใช้งาน Branch Protection สำหรับ Main Branch บน GitHub หรือ GitLab
- สื่อสารกันภายในทีมของคุณ ก่อนที่จะเขียน Shared History ใหม่
คำแนะนำเพิ่มเติมสำหรับการใช้งานขั้น Advance: สามารถใช้ git reflog บนเครื่องของคุณเพื่อกู้คืน Commit ที่สูญหายจากการ Force Push ได้ อย่างไรก็ตาม การใช้ Reflog บน Remote มักไม่สามารถเข้าถึงได้ ดังนั้น ควรตั้งค่า Pre-Receive Hooks เพื่อป้องกันการ Force Push ไปยัง Branch ที่สำคัญ
2. ความสับสนระหว่าง Merge กับ Rebase
เมื่อการเขียน History ใหม่สร้างปัญหา
สิ่งที่เกิดขึ้น:
คุณใช้ Git Rebase บน Branch ที่มีหลายคนใช้งานร่วมกัน หรือทำการ Merge Feature Branch โดยไม่จำเป็น จนเกิด Merge Commit จำนวนมากและทำให้ History ดูรก
ข้อดีของการ Merge:
- เก็บ History การเปลี่ยนแปลงและบริบททั้งหมดไว้ครบถ้วน
- ปลอดภัยทั้ง Public/Shared Branches
- รักษาลำดับเวลาในการพัฒนาได้อย่างชัดเจน
ข้อเสียของการ Merge:
- สร้าง “Merge Commits” ซึ่งอาจทำให้ History แบบ Linear ดูรก
- อาจทำให้การ Debug ด้วย git bisect ซับซ้อนมากขึ้น
ข้อดีของการ Rebase:
- สร้าง History ที่ Clean และเป็นเส้นตรง
- ช่วยให้ Code Review ทำได้ง่ายขึ้น
- ช่วยให้การดู History ด้วย git log --oneline เข้าใจง่ายขึ้น
ข้อเสียของการ Rebase:
- มีการเขียน History ใหม่ (ซึ่งอาจส่งผลเสียเมื่อใช้กับ Shared Branch)
- ต้องใช้ Force Push
- อาจทำให้ติดตามบริบทของ Commit เดิมได้ยากขึ้น
กฎสำคัญ:
- Rebase Private Branch: ก่อนที่จะ Merge เข้าสู่ Main
- Merge Public Branch: เมื่อทำงานกับทีม
- Rebase Interactively: git rebase -i HEAD~5 เพื่อ Squash หรือ Fix Commit ก่อน Push
คำแนะนำเพิ่มเติม: ใช้ git merge –squash สำหรับ Feature Branch ที่มี Commit ย่อยจำนวนมาก จากนั้นสร้าง Commit เดียวที่มีคำอธิบายชัดเจน
3. Commit มากเกินไป (หรือน้อยเกินไป)
Commit ที่ไม่มีระเบียบ
สิ่งที่เกิดขึ้น:
คุณอาจ commit ทุกอย่างในครั้งเดียว เช่น แก้ไขไฟล์ 20 ไฟล์ที่ไม่เกี่ยวข้องกัน หรือในทางกลับกัน Commit ถี่เกินไปทุก 2 นาที จนทำให้ History ดูรก
จุดสมดุลที่เหมาะสม:
- 1 Commit ควรมีการเปลี่ยนแปลงเพียงแค่เรื่องเดียวและมีความหมายที่ชัดเจน
- Commit ควรผ่านการ Compile และการ Test
- Commit Message ควรเป็นไปตามรูปแบบ: <type>(<scope>): <subject>
วิธีแก้ไข History ที่ไม่เป็นระเบียบ:

คำแนะนำเพิ่มเติม: ใช้ git add -p เป็นประจำ เพราะคำสั่งนี้จะช่วยให้คุณเลือก Stage เฉพาะบางส่วนของไฟล์ ทำให้สามารถสร้าง Commit ที่มีความหมายชัดเจน แม้จะมีการเปลี่ยนแปลงหลายอย่าง
4. การละเลย .gitignore
ปัญหา Repository ที่มีขนาดใหญ่ขึ้น(โดยไม่จำเป็น)
สิ่งที่เกิดขึ้น: Node_Modules, IDE Config, Build Artifacts และ System Files ถูก Commit เข้า Repository ส่งผลให้ Repository มีขนาดใหญ่มากขึ้น
ทำไมจึงสำคัญ:
- ทำให้การ Clone Repository ช้าลง
- ทำให้เกิด Conflict ใน Generated Files อัตโนมัติ
- อาจเปิดเผย Sensitive Data โดยไม่ตั้งใจ
วิธีแก้ไข:

คำแนะนำขั้นสูง: ใช้ BFG Repo-Cleaner หรือ git filter-branch เพื่อลบ Sensitive Data ออกจาก History อย่างถาวร แต่ควรแจ้งทีมก่อน เพราะการทำเช่นนี้จะเป็นการเขียน Commit History ใหม่ทั้งหมด
5. Commit Message ที่ไม่ชัดเจน
ปัญหา “Fixed stuff”
สิ่งที่เกิดขึ้น:
คุณเขียน Commit Message เช่น Update, Fix Bug หรือ Changes ซึ่งทำให้ git blame และ git log แทบไม่มีประโยชน์ในการย้อนดู History
มาตรฐานการขียน Commits:

ประเภท Commit ที่ควรใช้:
- feat: Feature ใหม่
- fix: แก้ Bug
- docs: Documentation
- style: การจัด Format
- refactor: ปรับโครงสร้าง Code
- test: เพิ่ม Test
- chore: งาน Maintenance
ตัวอย่าง Commit ที่ดี:

เครื่องมือช่วยเหลือ: ติดตั้ง Commit Message Template หรือใช้ Commitizen (cz-cli) เพื่อช่วยสร้าง Commit
6. เลือก Branch Workflow ไม่เหมาะสม
พฤติกรรม “ทำทุกอย่างบน Main”
สิ่งที่เกิดขึ้น:
มีการ Commit โดยตรงไปยัง Main หรือ Master, มี Feature Branch ที่มีอายุยาวเกินไปจนแตกต่างจาก Branch หลักมาก หรือมี Branch ที่ถูกทิ้งไว้โดยไม่ถูกลบออก
กลยุทธ์ที่มีประสิทธิภาพ:
GitFlow (เหมาะกับ Project ที่ซับซ้อน):
- main สำหรับ production
- develop สำหรับ integration
- feature/* สำหรับพัฒนา feature
- release/* สำหรับเตรียม release
- hotfix/* สำหรับแก้ไขปัญหาเร่งด่วน
GitHub Flow (เรียบง่ายกว่า):
- main พร้อม Deploy ได้เสมอ
- สร้าง Feature Branch จาก main
- เปิด Pull Request และ Merge กลับเข้า main
Trunk-Based Development (Advanced)
- Feature Branch มีอายุสั้น (ไม่เกิน 2 วัน)
- ใช้ Feature Flags แทน branch
- สนับสนุนให้ Commit ตรงไปยัง Trunk (Branch หลัก)
การดูแล Branch (Branch Maintenance):

7. ไม่ใช้ความสามารถ "การย้อนเวลา" ของ Git
ใช้เครื่องมือขั้นสูงของ Git ไม่เต็มประสิทธิภาพ
สิ่งที่เกิดขึ้น: มีการ Debug แบบ Manual แทนที่จะใช้ git bisect, สร้างงานใหม่แทนที่จะใช้ git reflog เพื่อกู้คืน หรือไม่ได้ใช้ git stash อย่างมีประสิทธิภาพ
เครื่องมือสำคัญที่ควรใช้งาน
Git Bisect (ค้นหา Bug แบบ Binary Search):

Git Reflog (Safety Net ของคุณ)

Git Worktree (พัฒนาแบบขนาน)

Advanced Stashing

การใช้งาน Git อย่างเชี่ยวชาญ: มากกว่าการหลีกเลี่ยงข้อผิดพลาด
การเชี่ยวชาญ Git ไม่ใช่แค่รู้คำสั่งต่าง ๆ ของมัน แต่ต้องเข้าใจ Workflow และแนวคิดด้วย
แนวคิดสำคัญ:
- มอง Git History เป็นการสื่อสาร: Commit ของคุณคือเรื่องราวสำหรับ Developer ในอนาคต ดังนั้นจงเขียน Commit ให้เข้าใจง่ายอยู่เสมอ
- ใช้ประโยชน์จาก Distributed Nature: การ Commit ใน Local ไม่มีผลกระทบกับทีมโดยตรง ดังนั้นควร Commit ตั้งแต่เนิ่น ๆ และ Commit บ่อย ๆ เพื่อเก็บความคืบหน้าของงานอย่างต่อเนื่อง
- เรียนรู้ Git ระดับลึก: เข้าใจ Objects, Trees และ Blobs จะช่วยให้เข้าใจ Git ได้ง่ายขึ้น
- ทำ Workflow ให้เป็นอัตโนมัติ: ใช้ Hooks, Aliases และ Scripts เพื่อลด Human Error

สรุป
และนี่ก็เป็น 7 ความผิดพลาดในการใช้ Git ที่ควรหลีกเลี่ยง เพื่อปรับ Workflow ให้ดีขึ้น เพราะการใช้งาน Git อย่างมีแนวทางที่ชัดเจน จะช่วยลดความสับสน และทำให้การทำงานร่วมกันเป็นทีมราบรื่นมากขึ้น การหลีกเลี่ยงความผิดพลาดทั้ง 7 ข้อนี้จะช่วยให้ Repos ของคุณ Clean ขึ้น, ตรวจสอบย้อนหลังได้ง่าย, Git Workflow มีความปลอดภัยและมีประสิทธิภาพมากขึ้น
ที่มา: https://medium.com/
รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert
อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ
บทความล่าสุด

