GIT เขียนทับสาขาด้วยมาสเตอร์


33

ฉันมีสาขาผู้พัฒนาเก่าที่ล้าสมัยไปแล้วอย่างสมบูรณ์ ฉันไม่ต้องการลบ แต่ฉันต้องการแทนที่เนื้อหาทั้งหมดด้วยสาขาหลัก หมายความว่าฉันต้องการ dev_branch = master

ฉันเหนื่อย:

git merge -s ours dev_branch

ไม่ทำงานแม้ว่า ...

คำตอบ:


54

หากคุณต้องการการเปลี่ยนแปลงทั้งหมดจากmasterในdev_branchแล้ว:

git checkout dev_branch
git reset --hard master

ใช้งานได้เฉพาะเมื่อคนอื่นไม่ได้โคลนที่เก็บ

หากคุณdev_branchผลักรีโมทไปแล้วคุณต้องทำ:

git push --force

เพื่อบังคับให้กดไปที่รีโมท คำเตือน: นี่จะทำลายประวัติศาสตร์ของสาขาสำหรับคนที่โคลนมาก่อน! จากนั้นคนอื่นจะต้องทำgit pull --rebaseต่อdev_branchไปเพื่อให้ได้การเปลี่ยนแปลง


คุณสามารถเปลี่ยนชื่อสาขา dev เป็นสาขาที่เก่าแล้วสร้างสาขาใหม่จากmasterชื่อเดียวกัน:

git branch -m dev_branch old_dev_branch
git branch -m master dev_branch

หรือใช้oursกลยุทธ์ - ไม่แน่ใจว่าทำไมมันไม่เหมาะกับคุณ:

git checkout master
git merge -s ours dev_branch
git checkout dev_branch
git merge master

ด้วยวิธีการเปลี่ยนชื่อฉันคิดว่าคุณจะพบว่าตอนนี้คุณไม่สามารถผลักดันdev_branchไปที่จุดเริ่มต้น (ถ้ามี) และคุณจะไม่มีmasterสาขาอีกต่อไป
Aidan

ขอบคุณ @slhck! ด้วยเหตุผลบางอย่างสเตจสาขาของฉันไม่ได้รับการอัปเดตหลังจากทำการผสานปกติ มันยังคงบอกว่าสาขาเวทีของฉันทันสมัย การใช้กลยุทธ์ "ของเรา" แก้ไขสิ่งนี้ให้ฉัน
เนียน Shinobi

ของเราจะส่งผลกระทบต่อชิ้นส่วนที่ขัดแย้งกันเท่านั้น แต่เขาต้องการที่จะต่ออายุสาขาอย่างสมบูรณ์ไม่ใช่แค่ความขัดแย้งเท่านั้น! (นี่คือสิ่งที่ฉันต้องทำและทำไมฉันถึงพบคำถามนี้) - ฉันจะเปลี่ยนชื่อ!
Martin Meeser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.