Git คือ ตอนที่ 6 : เทคนิคขั้นสูง (Advanced Techniques)

  1. การรีเบส (Rebasing)
  2. การแท็ก (Tagging)
  3. การเก็บเชอร์รี่ (Cherry-picking)
  4. โมดูลย่อย (Submodules)

Git เป็นระบบการควบคุมเวอร์ชันแบบกระจาย นำเสนอเทคนิคขั้นสูงมากมายที่สามารถมีประสิทธิภาพอย่างไม่น่าเชื่อเมื่อใช้อย่างถูกต้อง อย่างไรก็ตาม เทคนิคเหล่านี้มักไม่ได้รับการสำรวจโดยผู้เริ่มต้นเนื่องจากความซับซ้อน ในบทความนี้ เราจะเจาะลึกเทคนิคขั้นสูงบางส่วนเหล่านี้ โดยเฉพาะการรีเบส (Rebasing) การติดแท็ก (Tagging) การเลือกเชอร์รี่ (Cherry-picking) และการใช้โมดูลย่อย (Submodules) แม้ว่าเครื่องมือเหล่านี้จะซับซ้อน แต่ก็สามารถเพิ่มประสิทธิภาพการจัดการโครงการและความสามารถในการทำงานร่วมกันได้อย่างมากเมื่อทำแอพ

1. การรีเบส (Rebasing)

การรีเบส (Rebasing) เป็นทางเลือกแทนการรวม แทนที่จะสร้างคอมมิชชันใหม่ที่รวมสองสาขาที่แตกต่างกัน (เช่นเดียวกับการผสาน(merging)) การรีเพลย์ “replays” การเปลี่ยนแปลงจากสาขาหนึ่งไปยังอีกสาขาหนึ่ง สิ่งนี้นำไปสู่ประวัติการกระทำเชิงเส้นและง่ายต่อการติดตาม

สมมติว่าเรามีสาขาคุณลักษณะที่เราได้ทำข้อตกลงไว้ แต่ในขณะเดียวกันสาขาหลักก็ก้าวไปข้างหน้าเช่นกัน เราสามารถ Rebase Feature Branch ของเราที่ด้านบนของ Main Branch โดยใช้:

git checkout feature
git rebase main

ในระหว่างการรีเบส ความขัดแย้งอาจเกิดขึ้น Git จะหยุดชั่วคราวและอนุญาตให้คุณแก้ไขข้อขัดแย้งก่อนที่จะดำเนินการต่อ หลังจากแก้ไขแล้ว คุณสามารถใช้ git add . เพื่อจัดลำดับไฟล์ที่ได้รับการแก้ไข จากนั้นทำการรีเบสต่อด้วย git rebase --continue หากต้องการยกเลิกกระบวนการรีเบสทั้งหมด ให้ใช้ git rebase --abort

หนึ่งในตัวเลือกที่ทรงพลังสำหรับข้อเสนอการรีเบสคือการรีเบสแบบโต้ตอบ สิ่งนี้สามารถเรียกใช้ด้วย git rebase -i โหมดนี้ให้คุณแก้ไขการคอมมิตแต่ละรายการในกระบวนการ: คุณสามารถรวมเข้าด้วยกัน เปลี่ยนข้อความคอมมิต หรือแม้แต่ลบออกทั้งหมด มักใช้เพื่อล้างประวัติการคอมมิตก่อนที่จะรวมฟีเจอร์สาขากลับเข้าไปในสาขาหลัก

2. การแท็ก (Tagging)

ในวงจรชีวิตของการทำแอพ จะมีจุดที่ซอฟต์แวร์รุ่นใดรุ่นหนึ่งของคุณแสดงถึงความสำเร็จครั้งสำคัญ เช่น รุ่นเบต้า รุ่น 1.0 การแก้ไขจุดบกพร่องที่สำคัญ เป็นต้น จุดสำคัญเหล่านี้เป็นโอกาสที่ดีในการใช้คุณลักษณะการแท็กของ Git .

แท็กใน Git เป็นตัวชี้ไปยังคอมมิชชันเฉพาะ ทำให้คุณมีวิธีบุ๊กมาร์กบางจุดในประวัติโครงการของคุณ การสร้างแท็กนั้นง่ายมาก:

git tag v1.0

สิ่งนี้จะสร้างแท็กที่มีน้ำหนักเบาชื่อ (lightweight tag named) “v1.0” ที่การกระทำปัจจุบัน อย่างไรก็ตาม บ่อยครั้งคุณจะต้องสร้างแท็กที่มีคำอธิบายประกอบ ซึ่งช่วยให้คุณเก็บข้อมูลเมตาเพิ่มเติมได้ สามารถทำได้ด้วย:

git tag -a v1.0 -m "Version 1.0 release"

คุณสามารถดูแท็กที่มีอยู่ทั้งหมดด้วย git tag และคุณสามารถชำระเงินไปยังแท็กเฉพาะได้เช่นเดียวกับสาขาด้วย git checkout v1.0

3. การเก็บเชอร์รี่ (Cherry-picking)

ในกระบวนการทำแอพ อาจมีบางสถานการณ์ที่คุณทำข้อตกลงกับสาขาหนึ่ง แต่คุณต้องการใช้ข้อตกลงนั้นกับอีกสาขาหนึ่งโดยไม่รวมสาขาทั้งหมดเข้าด้วยกัน นี่คือที่ cherry-pick มาของคำสั่งที่มีประโยชน์

Cherry-pick ใช้การเปลี่ยนแปลงที่แนะนำโดยการคอมมิตที่มีอยู่ หากต้องการใช้งาน คุณต้องทราบแฮชของคอมมิชชันที่คุณต้องการเลือก สมมติว่าคุณมีคอมมิชชันที่มีแฮช abc123 ที่คุณต้องการนำไปใช้กับสาขาปัจจุบันของคุณ คุณจะใช้:

git cherry-pick abc123

หากคอมมิชชันใช้ได้อย่างหมดจด ก็แค่นั้นแหละ! ถ้าไม่ คุณจะต้องแก้ไขข้อขัดแย้ง จากนั้นเลือกเชอร์รี่ต่อไปด้วย git cherry-pick --continue หากต้องการยกเลิกกระบวนการ คุณสามารถใช้ git cherry-pick --abort

4. โมดูลย่อย (Submodules)

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

หากต้องการเพิ่มโมดูลย่อย คุณสามารถใช้คำสั่งต่อไปนี้:

git submodule add https://github.com/example/repo.git

คำสั่งนี้สร้างไฟล์ใหม่ที่ชื่อว่า .gitmodules ซึ่งจัดเก็บการแมประหว่าง URL ของโครงการและไดเร็กทอรีย่อยในเครื่องที่คุณดึงลงมา ในการโคลนโครงการด้วยโมดูลย่อย คุณสามารถใช้:

git clone --recurse-submodules https://github.com/example/repo.git

สิ่งสำคัญคือต้องจำไว้ว่าเมื่อคุณอยู่ในโมดูลย่อย คุณกำลังทำงานในที่เก็บอื่นที่มีประวัติและสาขาของตัวเอง ดังนั้น หากคุณต้องการดึงการเปลี่ยนแปลงล่าสุดจากอัพสตรีมของโมดูลย่อยในขณะที่คุณอยู่ในโมดูลย่อย คุณควรทำ git pull


การเรียนรู้เทคนิค Git ขั้นสูงเหล่านี้จะช่วยให้คุณมีเครื่องมือที่จำเป็นในการทำแอพและจัดการโค้ดเบสของคุณอย่างมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อทำแอพที่ซับซ้อนมากขึ้น อนุญาตประวัติการคอมมิตที่สะอาด การควบคุมเวอร์ชันที่สำคัญ แอ็พพลิเคชันการคอมมิตแบบเลือก และการจัดการไลบรารีภายนอกอย่างมีประสิทธิภาพ เช่นเดียวกับเครื่องมืออื่น ๆ พวกเขาต้องการการฝึกฝนเพื่อใช้อย่างเชี่ยวชาญ ดังนั้นฉันขอแนะนำให้คุณทดสอบในโครงการถัดไปของคุณ โปรดจำไว้เสมอว่า ช่างฝีมือที่ดีจะไม่โทษเครื่องมือของเขา แต่ช่างฝีมือที่ดีจะรู้จักเครื่องมือของเขาทั้งภายในและภายนอก Git ก็ไม่มีข้อยกเว้น


Git คืออะไร

Git คือ ตอนที่ 5 : การเลิกทำการเปลี่ยนแปลง (Undoing Changes)
Git คือ ตอนที่ 7 : การใช้ Git กับ GitHub