การแทนที่git merge
ที่จะเขียนทับไฟล์ที่ไม่ได้ติดตาม
ความคิดเห็นด้านล่างใช้ 'FOI' สำหรับ 'ไฟล์ที่น่าสนใจ' ซึ่งเป็นไฟล์ที่
- มีอยู่ในสาขาผู้บริจาค
- ไม่มีอยู่ในสาขาที่รับ
- และกำลังบล็อกการผสานเนื่องจากมีอยู่และไม่ได้ติดตามในไดเรกทอรีทำงานของคุณ
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
การแทนที่git pull
ที่จะเขียนทับไฟล์ที่ไม่ได้ติดตาม
pull = fetch + merge
ดังนั้นเราจึง git fetch
ตามด้วยgit checkout -f, git checkout, git merge
เคล็ดลับข้างต้น
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
คำอธิบายโดยละเอียด
git merge -f
ไม่ได้มีอยู่ แต่git checkout -f
ไม่
เราจะใช้git checkout -f
+ git checkout
เพื่อลบไฟล์ที่น่าสนใจ (ดูด้านบน) จากนั้นการผสานของคุณสามารถดำเนินการตามปกติ
ขั้นตอนที่ 1 ขั้นตอนนี้บังคับให้แทนที่ FOI ที่ไม่ได้ติดตามซึ่งมีรุ่นติดตามของสาขาผู้บริจาค (มันจะตรวจสอบสาขาผู้บริจาค
git checkout -f donor-branch
ขั้นตอนที่ 2 ขั้นตอนนี้จะลบ FOI ออกเนื่องจากพวกเขาถูกติดตามในสาขาปัจจุบันของเรา (ผู้บริจาค) และหายไปเมื่อreceiving-branch
เราเปลี่ยนเป็น
git checkout receiving-branch
ขั้นตอนที่ 3เมื่อ FOI ขาดหายไปการรวมในสาขาผู้บริจาคจะไม่เขียนทับไฟล์ที่ไม่ได้ติดตามใด ๆ ดังนั้นเราจึงไม่มีข้อผิดพลาด
git merge donor-branch