สิ่งสำคัญที่คุณต้องการที่นี่คือgit add -p( -pเป็นคำพ้องความหมาย--patch) นี่เป็นวิธีการโต้ตอบในการตรวจสอบเนื้อหาช่วยให้คุณตัดสินใจได้ว่าควรใส่ก้อนใหญ่แต่ละอันหรือไม่และแม้แต่ให้คุณแก้ไขแพตช์ด้วยตนเองหากจำเป็น
หากต้องการใช้ร่วมกับ cherry-pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(ขอบคุณ Tim Henigan ที่เตือนฉันว่า git-cherry-pick มีตัวเลือก - ไม่ผูกมัดและขอบคุณ Felix Rabe สำหรับการชี้ให้เห็นว่าคุณต้องรีเซ็ต! หากคุณต้องการทิ้งบางสิ่งออกไป คุณสามารถใช้git reset <path>...เพื่อ unstage เฉพาะไฟล์เหล่านั้น)
แน่นอนคุณสามารถระบุเส้นทางเฉพาะadd -pหากจำเป็น หากคุณกำลังเริ่มต้นด้วยแพทช์คุณสามารถแทนที่ด้วยcherry-pickapply
หากคุณต้องการจริงๆgit cherry-pick -p <commit>(ไม่มีตัวเลือกนั้น) คุณสามารถใช้
git checkout -p <commit>
สิ่งนั้นจะแตกต่างจากการกระทำในปัจจุบันกับการกระทำที่คุณระบุและอนุญาตให้คุณใช้การล่าสัตว์ที่แตกต่างกันไป ตัวเลือกนี้อาจมีประโยชน์มากขึ้นถ้าการกระทำที่คุณกำลังดึงมีการรวมความขัดแย้งในส่วนของการกระทำที่คุณไม่สนใจ (หมายเหตุอย่างไรก็ตามที่checkoutแตกต่างจากcherry-pick: checkoutพยายามที่จะใช้<commit>เนื้อหาทั้งหมดของcherry-pickใช้ความแตกต่างของ การคอมมิทที่ระบุจากพาเรนต์ของมันซึ่งหมายความว่าcheckoutสามารถใช้มากกว่าการคอมมิทนั้นซึ่งอาจมากกว่าที่คุณต้องการ)