ฉันจะรวมความมุ่งมั่นเฉพาะจากสาขาหนึ่งไปอีกสาขาหนึ่งใน Git ได้อย่างไร


159

ฉันมีBranchAซึ่งเป็น 113 BranchBกระทำไปข้างหน้าของ

แต่ฉันต้องการเพียงแค่ 10 ข้อสุดท้ายเท่านั้นที่จะBranchAรวมเข้าBranchBด้วยกัน

มีวิธีทำเช่นนี้หรือไม่?


คำตอบ:


233

git cherry-pick <commit>คำสั่งอนุญาตให้คุณใช้การส่งคำสั่งเดียว (จากสาขาใดก็ได้) และโดยหลักแล้วให้ rebase ในสาขาที่ทำงาน

บทที่ 5 ของหนังสือ Pro Git อธิบายได้ดีกว่าที่ฉันทำได้พร้อมไดอะแกรมและสิ่งนั้น ( บทที่เกี่ยวกับการ Rebasingก็อ่านได้ดีเช่นกัน)

สุดท้ายมีบางความคิดเห็นที่ดีในเชอร์รี่แคะ VS ผสาน VS rebasing ในคำถาม


1
คำถาม: พูดกระทำAจะถูกแยกออกจากmasterและคุณทำผลงานบางอย่างที่มันสร้างกระทำของเด็กผ่านB Eกล่าวว่าEมีเพียง 1 Dเส้นเพิ่มจาก ถ้าคุณgit cherry-pick Eเข้าไปในmasterมันไม่ได้ใช้ทุกการเปลี่ยนแปลงจากการAผ่านEเข้าไปในmasterสาขาหรือไม่ก็เพียง แต่ใช้การเปลี่ยนแปลงจากDการEคือจะเพิ่มเพียงว่าสาย 1 ไปmaster? หากกรณีเป็นอดีตฉันจะบรรลุผลหลังได้อย่างไร (นอกเหนือจากการคัดลอกและวางด้วยตนเอง)
chharvey

7
git cherry-pick -n <commit> หากคุณไม่ต้องการให้ Cherry pick อัตโนมัติ
Ben Flynn

6

หาก BranchA ไม่ได้ถูกผลักไปที่รีโมตคุณสามารถจัดลำดับการคอมมิทใหม่ได้โดยใช้rebaseเพียงแค่mergeนั้น มันจะดีกว่าที่จะใช้mergeมากกว่าrebaseเมื่อเป็นไปได้เพราะมันไม่ได้สร้างความผูกพันที่ซ้ำกัน

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]

2

แหล่งที่มา: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

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

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการดึง e43a6 ลงในสาขาหลักของคุณคุณสามารถเรียกใช้

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

สิ่งนี้จะดึงการเปลี่ยนแปลงแบบเดียวกันกับที่แนะนำใน e43a6 แต่คุณจะได้รับค่าการมอบหมาย SHA-1 ใหม่เนื่องจากวันที่ใช้นั้นแตกต่างกัน ตอนนี้ประวัติของคุณจะเป็นดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณสามารถลบสาขาหัวข้อของคุณและวาง commits ที่คุณไม่ต้องการดึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.