ในฐานะแฮ็คคุณสามารถลองแก้ไขสูตรเพื่อเปรียบเทียบการคอมมิทในที่เก็บสองที่แตกต่างกันในหน้า GitTipsเช่น
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects \
git cherry-pick $(git --git-dir=../repo/.git rev-parse --verify <commit>)
ที่../repoเป็นเส้นทางไปยังพื้นที่เก็บข้อมูลอื่น ๆ
ด้วยความทันสมัย Git คุณสามารถใช้การแก้ไขหลายครั้งและช่วงการแก้ไขด้วยเชอร์รี่เลือก
$(git --git-dir=../repo/.git rev-parse --verify <commit>)
อยู่ที่นี่เพื่อแปล<commit>(ตัวอย่างHEADหรือv0.2หรือmaster~2ซึ่งเป็นค่าที่อยู่ในพื้นที่เก็บข้อมูลที่สองคุณคัดลอกจาก) ลง SHA-1 ตัวบ่งชี้ของการกระทำ หากคุณทราบ SHA-1 ของการเปลี่ยนแปลงที่คุณต้องการเลือกก็ไม่จำเป็น
หมายเหตุแต่ที่ Git สามารถข้ามวัตถุคัดลอกจากพื้นที่เก็บข้อมูลแหล่งที่มาที่มันไม่ได้รู้ว่าที่เก็บวัตถุอื่นเป็นเพียงชั่วคราวสำหรับการดำเนินการอย่างใดอย่างหนึ่ง คุณอาจต้องคัดลอกวัตถุจากที่เก็บที่สองด้วย:
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo/.git/objects git repack -a -d -f
สิ่งนี้ทำให้อ็อบเจ็กต์เหล่านั้นยืมมาจากที่เก็บที่สองในที่เก็บต้นฉบับ
ไม่ผ่านการทดสอบ
วิธีแก้ปัญหาที่ไม่แฮ็กคือทำตามคำตอบของ knittl :
- ไปที่ที่เก็บที่สองที่คุณต้องการคัดลอกคอมมิตและสร้างแพตช์จากคอมมิตที่คุณต้องการ
git format-patch
- เลือกคัดลอกแพตช์ (0001- * ฯลฯ ) ไปยังที่เก็บของคุณ
- ใช้
git am --3wayทาแพทช์