ผสานกับความมุ่งมั่นเฉพาะ


372

ฉันสร้างสาขาใหม่ชื่อnewbranchจากmasterสาขาในคอมไพล์ ตอนนี้ผมได้ทำการทำงานบางอย่างและต้องการที่จะผสานnewbranchไปmaster; แต่ผมได้ทำการเปลี่ยนแปลงบางอย่างเพื่อเสริมnewbranchและฉันต้องการที่จะรวมถึงที่สี่จากที่ผ่านมามอบให้newbranchmaster

ฉันใช้cherry-pickแต่มันแสดงข้อความให้ใช้ตัวเลือกที่เหมาะสม:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

ฉันสามารถใช้คอมไพล์mergeเพื่อทำแทนได้หรือไม่?

git merge newbranch <commitid>

คำตอบ:


592

แน่นอนว่าการอยู่ในmasterสาขาทั้งหมดที่คุณต้องทำคือ:

git merge <commit-id>

ที่commit-idเป็นกัญชาของสุดท้ายกระทำจากnewbranchที่คุณต้องการที่จะได้รับของคุณในmasterสาขา

คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งคอมไพล์ใด ๆ git help <command>โดยการทำ มันเป็นgit help mergeอย่างนั้น และเอกสารกำลังบอกว่าอาร์กิวเมนต์สุดท้ายสำหรับmergeคำสั่งคือ<commit>...เพื่อให้คุณสามารถผ่านการอ้างอิงถึงการกระทำใด ๆ หรือแม้กระทั่งหลายคอมมิชชัน แม้ว่าฉันจะไม่ได้ทำตามหลังตัวเอง


30
ไม่เพียงกระทำเดียว แต่กระทำทั้งหมดก่อนหน้านี้commit-id
Dau

53
ใช่มันจะรวมการกระทำทั้งหมดnewbranchตั้งแต่เวลาที่ประวัติแยกจากmasterกันcommit-idเป็นmasterสาขา คุณสามารถนึกถึงgit merge <commit-id>การรวมสาขาที่ไม่มีชื่อบางสาขาที่ลงท้ายด้วยcommit-idสาขาปัจจุบันของคุณ
KL-7

2
ฉันสามารถผสานระหว่างสาขาในพื้นที่สองแห่งนอกเหนือจากต้นแบบโดยใช้ commit id ได้หรือไม่
skt

1
@skt git mergeคุณสามารถเพียงแค่จะอยู่ในสาขาในประเทศที่คุณต้องการผสานเข้าไปก่อนที่จะใช้ เช่นบอกว่าคุณต้องการที่จะรวมการกระทำ 18a6fac จากสาขา b2 ลงในสาขา b1 เพียงแค่ทำgit checkout b1; git merge 18a6fac
XioRcaL

1
สิ่งนี้ดูเหมือนจะไม่ทำงานถ้าฉันอยู่ในสาขาที่ฉันต้องการรวมเข้าด้วยกันและมีสาขาอื่นที่ทำหน้าที่ AB และ C และฉันรวมใน C เท่านั้นที่จะได้รับการเปลี่ยนแปลงใน C ไม่ใช่ A และ B
ggb667

12

เพื่อให้การแยกกิ่งสะอาดอยู่เสมอคุณสามารถทำสิ่งนี้:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

ด้วยวิธีนี้ newbranch จะสิ้นสุดที่รวมเข้ากับมาสเตอร์และคุณยังคงทำงานต่อใน newbranch2


1

เรียกใช้คำสั่งด้านล่างลงในโฟลเดอร์สาขาปัจจุบันเพื่อผสานจาก<commit-id>สาขานี้ไปยังสาขาปัจจุบัน--no-commitอย่าทำการคอมมิทใหม่โดยอัตโนมัติ

git merge --no-commit <commit-id>

git merge --continue สามารถทำงานได้หลังจากการผสานทำให้เกิดข้อขัดแย้ง

git merge --abort ยกเลิกกระบวนการแก้ไขข้อขัดแย้งในปัจจุบันและพยายามสร้างสถานะ pre-merge ใหม่

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