ฉันมีปัญหาที่คล้ายกันและฉันแก้ไขได้โดยการปรับเปลี่ยนงานของฉันให้ตรงกับองค์กรของไฟล์เป้าหมาย
บอกได้เลยว่าคุณปรับเปลี่ยนoriginal.txtสาขาคุณ ( localสาขา) แต่ในสาขาต้นแบบที่ได้รับการคัดลอกไปยังอีกคนหนึ่งกล่าวว่าoriginal.txt สำเนานี้ได้รับการดำเนินการในการกระทำที่เรากระทำชื่อcopy.txtCP
คุณต้องการที่จะใช้การเปลี่ยนแปลงของคุณทั้งหมดท้องถิ่นกระทำAและBด้านล่างที่ทำในเพื่อไฟล์ใหม่original.txtcopy.txt
---- X -----CP------ (master)
\
\--A---B--- (local)
สร้างสาขาทิ้งmoveที่จุดเริ่มต้นของการเปลี่ยนแปลงของคุณด้วยgit branch move X. กล่าวคือวางmoveสาขาไว้ที่การคอมมิตXอันหนึ่งก่อนคอมมิตที่คุณต้องการผสาน เป็นไปได้มากว่านี่คือการกระทำที่คุณแยกออกมาเพื่อใช้การเปลี่ยนแปลงของคุณ ในฐานะผู้ใช้DOO @digoryเขียนด้านล่างที่คุณสามารถทำได้เพื่อค้นหาgit merge-base master localX
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
ในสาขานี้ใช้คำสั่งเปลี่ยนชื่อต่อไปนี้:
git mv original.txt copy.txt
สิ่งนี้เปลี่ยนชื่อไฟล์ โปรดทราบว่าcopy.txtในตอนนี้ยังไม่มีต้นไม้ของคุณ
ยอมรับการเปลี่ยนแปลงของคุณ (เราตั้งชื่อการกระทำนี้MV)
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
ตอนนี้คุณสามารถสร้างฐานงานของคุณใหม่ด้านบนของmove:
git rebase move local
วิธีนี้จะใช้งานได้โดยไม่มีปัญหาและการเปลี่ยนแปลงของคุณจะถูกนำไปใช้กับcopy.txtสาขาในพื้นที่ของคุณ
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
ตอนนี้คุณไม่จำเป็นต้องหรือไม่จำเป็นต้องมีส่วนร่วมMVในประวัติของสาขาหลักของคุณเนื่องจากการดำเนินการย้ายอาจนำไปสู่ความขัดแย้งกับการดำเนินการคัดลอกที่กระทำCPในสาขาหลัก
คุณจะต้องสร้างฐานงานของคุณใหม่อีกครั้งโดยทิ้งการดำเนินการย้ายดังนี้:
git rebase move local --onto CP
... CPการกระทำอยู่ที่ใดซึ่งcopy.txtได้รับการแนะนำในสาขาอื่น นี่เป็นการปรับฐานการเปลี่ยนแปลงทั้งหมดที่copy.txtอยู่ด้านบนของคอมCPมิต ตอนนี้localสาขาของคุณเหมือนกับว่าคุณแก้ไขcopy.txtและไม่แก้ไขเสมอoriginal.txtและคุณสามารถรวมกับคนอื่น ๆ ต่อไปได้
/--A''---B''-- (local)
/
-----X-------CP----- (master)
มันเป็นสิ่งสำคัญที่การเปลี่ยนแปลงจะถูกนำมาใช้ในCPหรือมิฉะนั้นจะไม่อยู่และการเปลี่ยนแปลงที่จะกลับมาประยุกต์ใช้ในcopy.txtoriginal.txt
หวังว่านี่จะชัดเจน คำตอบนี้มาช้า แต่อาจเป็นประโยชน์กับคนอื่น