ฉันมีBranchA
ซึ่งเป็น 113 BranchB
กระทำไปข้างหน้าของ
แต่ฉันต้องการเพียงแค่ 10 ข้อสุดท้ายเท่านั้นที่จะBranchA
รวมเข้าBranchB
ด้วยกัน
มีวิธีทำเช่นนี้หรือไม่?
ฉันมีBranchA
ซึ่งเป็น 113 BranchB
กระทำไปข้างหน้าของ
แต่ฉันต้องการเพียงแค่ 10 ข้อสุดท้ายเท่านั้นที่จะBranchA
รวมเข้าBranchB
ด้วยกัน
มีวิธีทำเช่นนี้หรือไม่?
คำตอบ:
git cherry-pick <commit>
คำสั่งอนุญาตให้คุณใช้การส่งคำสั่งเดียว (จากสาขาใดก็ได้) และโดยหลักแล้วให้ rebase ในสาขาที่ทำงาน
บทที่ 5 ของหนังสือ Pro Git อธิบายได้ดีกว่าที่ฉันทำได้พร้อมไดอะแกรมและสิ่งนั้น ( บทที่เกี่ยวกับการ Rebasingก็อ่านได้ดีเช่นกัน)
สุดท้ายมีบางความคิดเห็นที่ดีในเชอร์รี่แคะ VS ผสาน VS rebasing ในคำถาม
A
จะถูกแยกออกจากmaster
และคุณทำผลงานบางอย่างที่มันสร้างกระทำของเด็กผ่านB
E
กล่าวว่าE
มีเพียง 1 D
เส้นเพิ่มจาก ถ้าคุณgit cherry-pick E
เข้าไปในmaster
มันไม่ได้ใช้ทุกการเปลี่ยนแปลงจากการA
ผ่านE
เข้าไปในmaster
สาขาหรือไม่ก็เพียง แต่ใช้การเปลี่ยนแปลงจากD
การE
คือจะเพิ่มเพียงว่าสาย 1 ไปmaster
? หากกรณีเป็นอดีตฉันจะบรรลุผลหลังได้อย่างไร (นอกเหนือจากการคัดลอกและวางด้วยตนเอง)
หาก 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]
แหล่งที่มา: 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 ที่คุณไม่ต้องการดึง