Cherry-Picking

Git ขั้นสูง

Amanda Crawford-Adamo

Software and Data Engineer

Cherry-pick คืออะไร?

นำการเปลี่ยนแปลงจาก commit ที่ระบุไปใช้กับ branch อื่น

Cherry-Pick Commit เดียว

git cherry-pick <commit-hash>

Cherry-Pick หลาย Commit

git cherry-pick <hash1> <hash2> ..

วัตถุประสงค์

  • นำการแก้ไขบั๊กเฉพาะจุดไปใช้ข้าม branch
  • ย้อนกลับฟีเจอร์ไปยังเวอร์ชันที่เสถียร
  • นำการเปลี่ยนแปลงเชิงทดลองมาใช้อย่างเลือกสรร
  • กู้คืน commit ที่สูญหาย
Git ขั้นสูง

ตัวอย่าง Cherry-Pick

กราฟแสดง branch main และ feature โดย main มี 2 commit และ feature branch แตกออกจาก main หลัง commit สุดท้าย

ภาพสองภาพแสดง log ของ branch main และ feature ก่อนกระบวนการ cherry-pick

Git ขั้นสูง

กระบวนการ Cherry-Pick

  1. Checkout ไปยัง branch main

    git checkout main
    
  2. รันคำสั่ง cherry-pick เพื่อนำการเปลี่ยนแปลงของ commit def456 จาก feature branch มาใช้

    git cherry-pick def456
    

กราฟแสดง branch main และ feature โดย main มี 3 commit และ feature branch แตกออกจาก main หลัง commit ที่สองพร้อมมีอีก 2 commit เพิ่มเติม commit ที่สามของ main คือ commit ที่ cherry-pick มาจาก commit สุดท้ายของ feature branch

Git ขั้นสูง

การแก้ไข conflict ใน cherry-pick

ขั้นตอนแก้ไข conflict
  1. แก้ไขไฟล์ที่มี conflict ด้วยตนเอง
  2. เพิ่มไฟล์ที่แก้ไขแล้วไปยัง staging ด้วย git add <resolved-files>
  3. ดำเนินการ cherry-pick ต่อโดยใช้ flag --continue
git cherry-pick --continue
หยุดการ cherry-pick

หากต้องการยกเลิกการ cherry-pick ให้ใช้ flag --abort

git cherry-pick --abort
Git ขั้นสูง

ควรใช้ cherry-pick เมื่อใด?

กรณีการใช้งาน

  1. การนำ hotfix ไปใช้
  2. การทดสอบฟีเจอร์เฉพาะส่วน

ข้อควรระวัง

  1. อาจเกิด commit ซ้ำซ้อน
  2. หากใช้บ่อยเกินไปอาจทำให้ประวัติโปรเจกต์ซับซ้อน
  3. การเปลี่ยนแปลงขนาดใหญ่: ควรพิจารณาใช้ merge หรือ rebase แทน
Git ขั้นสูง

มาฝึกกันเถอะ!

Git ขั้นสูง

Preparing Video For Download...