จากhttps://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging
โดยทั่วไปจะทำการผสานปลอม มันจะบันทึกการผสานใหม่ที่กระทำกับทั้งสองสาขาในฐานะผู้ปกครอง แต่จะไม่ได้ดูที่สาขาที่คุณกำลังรวมเข้าด้วยกันมันจะบันทึกเป็นผลจากการผสานรหัสที่แน่นอนในสาขาปัจจุบันของคุณ
$ git merge -s ours mundo
ผสานโดยกลยุทธ์ 'ของเรา'
$ git diff HEAD HEAD~
คุณสามารถเห็นได้ว่าไม่มีความแตกต่างระหว่างสาขาที่เราเปิดและผลลัพธ์ของการรวม
สิ่งนี้มักจะมีประโยชน์ในการหลอกลวง Git โดยคิดว่าสาขานั้นถูกผสานไปแล้วเมื่อทำการผสานในภายหลัง ตัวอย่างเช่นสมมติว่าคุณแยกสาขาย่อยออกและทำงานบางอย่างกับสาขานั้นคุณจะต้องการรวมกลับเข้าไปในสาขาหลักของคุณในบางจุด ในขณะเดียวกันข้อผิดพลาดบางอย่างในต้นแบบจะต้องมีการ backported ในสาขาการเปิดตัวของคุณ คุณสามารถรวมสาขาบั๊กแก้ไขเข้าไปในสาขารีลีสและรวมสาขาของเราเข้ากับสาขาหลักของคุณ (แม้ว่าการแก้ไขจะมีอยู่แล้ว) ดังนั้นเมื่อคุณผสานสาขาที่วางจำหน่ายในภายหลัง
สถานการณ์ที่ฉันพบว่ามีประโยชน์ถ้าฉันต้องการให้เจ้านายสะท้อนการเปลี่ยนแปลงของหัวข้อหัวข้อใหม่ ฉันสังเกตเห็นว่า -Xtheirs ไม่รวมกันโดยไม่มีข้อขัดแย้งในบางสถานการณ์ ... เช่น
$ git merge -Xtheirs topicFoo
CONFLICT (modify/delete): js/search.js deleted in HEAD and modified in topicFoo. Version topicFoo of js/search.js left in tree.
ในกรณีนี้วิธีแก้ปัญหาที่ฉันพบคือ
$ git checkout topicFoo
จาก topicFoo แรกผสานในต้นแบบโดยใช้กลยุทธ์ -s ของเรานี้จะสร้างการกระทำปลอมที่เป็นเพียงสถานะของ topicFoo $ git ผสาน - อาจารย์ของเรา
ตรวจสอบการรวมที่สร้างไว้
$ git log
ตอนนี้เช็คเอาท์สาขาหลัก
$ git checkout master
ผสานสาขาหัวข้อกลับ แต่คราวนี้ใช้กลยุทธ์แบบเรียกซ้ำ -Xtheirs ตอนนี้จะนำเสนอคุณด้วยสาขาหลักที่มีสถานะของ topicFoo
$ git merge -X theirs topicFoo