สิ่งสำคัญที่คุณต้องการที่นี่คือ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-pick
apply
หากคุณต้องการจริงๆgit cherry-pick -p <commit>
(ไม่มีตัวเลือกนั้น) คุณสามารถใช้
git checkout -p <commit>
สิ่งนั้นจะแตกต่างจากการกระทำในปัจจุบันกับการกระทำที่คุณระบุและอนุญาตให้คุณใช้การล่าสัตว์ที่แตกต่างกันไป ตัวเลือกนี้อาจมีประโยชน์มากขึ้นถ้าการกระทำที่คุณกำลังดึงมีการรวมความขัดแย้งในส่วนของการกระทำที่คุณไม่สนใจ (หมายเหตุอย่างไรก็ตามที่checkout
แตกต่างจากcherry-pick
: checkout
พยายามที่จะใช้<commit>
เนื้อหาทั้งหมดของcherry-pick
ใช้ความแตกต่างของ การคอมมิทที่ระบุจากพาเรนต์ของมันซึ่งหมายความว่าcheckout
สามารถใช้มากกว่าการคอมมิทนั้นซึ่งอาจมากกว่าที่คุณต้องการ)