Lesser-Known Git Techniques

01-Nov-23

คัมภีร์เทพ IT

See the original english version Click here!

 

Git ถือเป็นรากฐานสำคัญของ Version Control Systems มันช่วยให้คนในทีมสามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพ, ติดตามการเปลี่ยนแปลง และรักษาความสมบูรณ์ของ Code ได้ การที่ Developer รู้จักเทคนิคขั้นสูงการใช้งาน Git จะช่วยปรับปรุง Workflow ของคุณได้อย่างมาก และนี่ก็คือ 10 Git Command ที่ Developers หลายคนอาจยังไม่รู้จัก

1. Cherry-Picking

คุณสามารถใช้ Cherry-picking เมื่อต้องการ Commit สิ่งที่ต้องการจาก Branch หนึ่งไปอีก Branch หนึ่ง สิ่งนี้มีประโยชน์มากเมื่อคุณต้องการ Backport การแก้ไข Bug หรือ Feature ไปยัง Branch อื่นโดยไม่ต้อง Merge Branch ทั้งหมดเข้าด้วยกัน

ตัวอย่าง: คุณได้แก้ไข Bug ที่ร้ายแรงใน Development Branch (Main) แต่มี Bug เดียวกันนี้ใน Release Branch (Release-1.0) ก่อนหน้านี้ที่มีความเสถียร คุณสามารถใช้ Cherry-Pick เพื่อ Commit การแก้ไข Bug จาก Main ไปยัง Release-1.0 เพื่อให้แน่ใจว่าได้มีการแก้ไขทั้ง 2 ที่แล้ว

2. Interactive Rebase

Interactive Rebase ถูกใช้เพื่อจัดการกับ Commit History มันมีประโยชน์ในกรณีที่คุณต้องการ Clean Commits ของคุณ, Combine การเปลี่ยนแปลงที่เกี่ยวข้องกัน หรือการเรียงลำดับ Commits เสียใหม่ เพื่อให้มี History ที่สอดคล้องกันมากขึ้นก่อนที่จะ Merge เข้าด้วยกัน

ตัวอย่าง: คุณได้มีการ Commit หลาย ๆ รายการที่เกี่ยวข้องกันในระหว่างการ Develop เมื่อสร้าง Pull Request คุณต้องการนำเสนอ History ที่ Clean ยิ่งขึ้น คุณสามารถใช้ Interactive Rebase เพื่อยุบรวม Commits เหล่านั้นให้เป็น หนึ่งเดียว แต่มีความหมายและช่วยให้คุณเข้าใจได้มากขึ้น

3. Git Stash

คำสั่ง Stash มีประโยชน์มากเมื่อคุณกำลังทำงานบางอย่างอยู่ แต่จำเป็นต้องเปลี่ยนไปใช้ Branch อื่นเพื่อจัดการกับ Task ที่มีความเร่งด่วน คุณสามารถจัดเก็บการเปลี่ยนแปลงของคุณไว้ก่อนชั่วคราว และสามารถนำกลับไปใช้ใหม่ในภายหลังได้

ตัวอย่าง: คุณกำลังทำงานอยู่ใน Feature Branch จากนั้นคุณก็ได้รับ Request ให้รีบแก้ไข Bug อย่างเร่งด่วน คุณสามารถซ่อนการเปลี่ยนแปลงในปัจจุบันไว้ แล้วสลับไปที่ Main Branch ทำการแก้ไข Bug แล้ว Commit จากนั้นก็กลับมาที่ Feature Branch ของคุณแล้วทำงานที่คุณทำค้างไว้

4. Submodules

Submodules มักจะถูกใช้เมื่อ Projects ของคุณมีการใช้งาน External Repositories มันจะช่วยจัดการการในเรื่อง Dependencies และจะอนุญาตให้คุณสามารถรวม Projects อื่น ๆ เข้าเป็นส่วนหนึ่งของ Projects ของคุณเอง

ตัวอย่าง: Projects ของคุณ,ต้องอาศัย 3rd-Party Library ที่เก็บอยู่ใน Repository อื่นที่แยกออกไปต่างหาก แทนที่จะ Copy Library Files ลงใน Projects ของคุณ คุณสามารถเพิ่มพวกมันเป็น Submodules ได้ ด้วยวิธีนี้ จะทำให้คุณสามารถแยก Projects และ Library Code ออกจากกันได้ในขณะที่ยังใช้งานอยู่

5. Git Bisect

Bisect เป็นเครื่องมือที่ทรงพลังในการค้นหา Commit ที่ทำให้เกิด Bug โดยมันจะช่วยจำกัด Commit History ที่มีขนาดใหญ่ให้แคบลงเพื่อให้สามารถค้นหา Commit ที่มีปัญหาได้อย่างรวดเร็ว

ตัวอย่าง: คุณเจอ Bug ใน Codebase ของคุณ แต่คุณไม่แน่ใจว่า Commit ใดที่เป็นสาเหตุของ Bug ดังกล่าว เมื่อคุณใช้ Git Bisect คุณจะสามารถทราบได้ว่า Commits ที่ทำให้เกิดปัญหา และ Git ก็จะทำการค้นหาแบบ Binary Search เพื่อระบุ Commit ที่เป็นสาเหตุทำให้เกิด Bug

6. Git Reflog

Reflog ถือเป็นสิ่งที่ช่วยชีวิตคุณได้ ในกรณีที่คุณได้ทำการเปลี่ยนแปลงสิ่งที่คุณต้องการจะ Recover แต่คุณกลับไม่พบมันใน Commit History ล่าสุดของคุณ

ตัวอย่าง: คุณบังเอิญลบ Branch ที่มี Code ส่วนที่สำคัญอยู่โดยไม่ได้ตั้งใจ แต่ Reflog จะทำการเก็บบันทึก History ของ Branch ของคุณ แม้ว่าจะถูกลบไปแล้วก็ตาม ดังนั้น คุณจึงสามารถค้นหา Commit Hash และ Recover Code กลับคืนมาได้

7. Squash & Merge

Squash และ Merge จะถูกใช้เพื่อช่วยทำให้ Commit History ของคุณ Clean ด้วยการรวม Commits ที่เกี่ยวข้องหลาย ๆ รายการให้เป็นหนึ่งเดียว ก่อนที่จะรวม Feature Branch เข้าด้วยกัน

ตัวอย่าง: คุณได้ทำงานใน Feature Branch และมีการ Commit หลายรายการในระหว่าง Development Process เมื่อถึงเวลาที่ต้อง Merge คุณสามารถยุบรวม Commit เหล่านั้นให้เป็น Commit เดียว โดยที่รวบรวมสาระสำคัญของ Features เอาไว้

8. Revert a Merge Commit

การดำเนินการนี้ถือมีความสำคัญ ในกรณีที่คุณ Merge การเปลี่ยนแปลงที่อาจจะกลายเป็นปัญหาในภายหลังได้ การคืนค่าการ Merge จะทำการยกเลิกการเปลี่ยนแปลงที่เกิดขึ้นจากการ Merge นั้น

ตัวอย่าง: คุณได้ Merge Feature Branch เข้ากับ Main Branch แล้ว แต่มันกลับทำให้เกิดปัญหาที่คุณไม่ได้คาดคิด คุณสามารถคืนค่าการ Merge Commit ทั้งหมดเพื่อ Roll Back การเปลี่ยนแปลงเหล่านั้นได้อย่างรวดเร็วในขณะที่ยังรักษา Main Branch ของคุณให้มีความเสถียรอยู่

9. Signed Commits

การ Sign Commits จะช่วยเพิ่ม Security และ Authentication ให้กับ Commits ของคุณเข้าไปอีกชั้นหนึ่ง โดยตรวจสอบว่า มันมาจากแหล่งที่เชื่อถือได้หรือไม่

ตัวอย่าง: คุณกำลังมีส่วนร่วมใน Open-Source Project และ Commits ของคุณจะต้องได้รับการยืนยันว่ามันมาจากคุณจริง ๆ ด้วยการ Sign Commits ของคุณด้วย GPG Key จะทำให้ผู้อื่นสามารถเชื่อถือในความถูกต้องของการมีส่วนร่วมของคุณได้

10. Worktrees

Worktrees จะช่วยให้คุณสามารถมี Instances ของ Repository ได้หลายรายการที่ทำงานบน Branches ที่แตกต่างกันได้พร้อม ๆ กัน

ตัวอย่าง: คุณกำลังทำงานกับ Feature Branch แต่คุณต้องเปลี่ยนไปใช้ Branch อื่นอย่างรวดเร็วเพื่อแก้ไข Bug ที่มีความร้ายแรง แทนที่จะ Stash หรือ Commit การเปลี่ยนแปลง คุณสามารถสร้าง Worktree สำหรับ Bug-Fix Branch, ทำการแก้ไขแยกกัน จากนั้นสลับกลับไปยัง Feature Branch ของคุณโดยไม่สูญเสียความคืบหน้าแต่อย่างใด

สรุป

เมื่อ Development Projects ของคุณมีความก้าวหน้าและขยายใหญ่ขึ้น คุณควรมีความเชี่ยวชาญการใช้งาน Git ในขั้นสูง เป็นอย่างยิ่ง เพราะ 10 Git Commands ที่อยู่ในบทความนี้ ถือเป็นเครื่องมืออันทรงพลัง ที่จะช่วยให้คุณสามารถรับมือกับความท้าทายต่าง ๆ ด้วยความมั่นใจยิ่งขึ้น

ที่มา: https://blog.devgenius.io/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด