การแก้ไขข้อขัดแย้งผสาน 'ทั้งที่เพิ่ม' ในคอมไพล์?


138

ฉันรีบูตด้วยระบบคอมไพล์และหนึ่งความขัดแย้งที่ฉันได้รับคือ 'เพิ่มทั้งคู่' - นั่นคือชื่อไฟล์เดียวกันถูกเพิ่มอย่างอิสระในสาขาของฉันและในสาขาที่ฉันรีบูต git statusบอกฉัน:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

คำถามของฉันคือฉันจะแก้ไขปัญหานี้ได้อย่างไร ฉันต้องใช้เครื่องมือผสานหรือมีวิธีที่ฉันสามารถทำได้เพียงแค่จาก commandline หรือไม่ ถ้าฉันgit rm src/MyFile.csgit รู้ได้อย่างไรว่าฉันต้องการลบไฟล์เวอร์ชันใดและฉันต้องการเก็บไว้อย่างไร

คำตอบ:


139

หากคุณใช้git rmคอมไพล์จะลบพา ธ เวอร์ชันนั้นออกจากดัชนีดังนั้นการดำเนินการแก้ไขของคุณจะทำให้คุณไม่มีเวอร์ชันใด

คุณสามารถใช้git checkout --ours src/MyFile.csเพื่อเลือกรุ่นจากสาขาไปยังที่คุณกำลังรีบูตหรือgit checkout --theirs src/MyFile.csเพื่อเลือกเวอร์ชันจากสาขาที่คุณกำลังรีบูต

หากคุณต้องการผสมผสานคุณต้องใช้เครื่องมือผสานหรือแก้ไขด้วยตนเอง


1
ขอบคุณ และฉันเพิ่งรู้ว่าสาเหตุที่เครื่องมือการผสานไม่ทำงานเนื่องจาก git สร้างไฟล์. Local และ. REMOTE สำหรับการผสาน แต่ไม่ใช่ไฟล์. Base ฉันคิดว่ามันควรสร้างไฟล์. BASE ที่ว่างเปล่า หากคุณสร้างไฟล์. BASE ที่ว่างเปล่าด้วยตนเองเครื่องมือผสานจะทำงานได้ดี
Jez

1
@Jez: โปรดดูหัวข้อนี้: thread.gmane.org/gmane.comp.version-control.git/188776/…
CB Bailey

1
คุณกำลังบอกว่าสิ่งนี้จะได้รับการแก้ไขใน git รุ่นล่าสุดหรือไม่?
Jez

1
@Jez: มันอยู่ในรุ่นคอมไพล์> = 1.7.9.1 git.kernel.org/?p=git/…
CB Bailey

21
จาก @Tom คำตอบ: เมื่อทำ ... git checkout --ours someFile อาจดูเหมือนว่าไม่ได้ทำอะไรเมื่อทำสถานะคอมไพล์ เพียงจำไว้ว่าให้ทำเช่นนี้ในภายหลัง git add someFile git status
pec

72

บางครั้งฉันรู้สึกสับสนในการใช้--theirsและ--oursตัวเลือกเพื่อระบุว่าไฟล์จะมาจากที่ใด เวลาส่วนใหญ่ของฉันจะอยู่ในสาขาที่ฉันกำลังรีสตาร์ตซึ่งถูกอ้างถึงโดย--theirs!

คุณยังสามารถใช้ git checkout <tree-ish> -- src/MyFile.cs

ตำแหน่งที่<tree-ish>สามารถถูกแทนที่ด้วยชื่อสาขาหรือ commit-id ที่มีไฟล์ที่คุณต้องการเก็บไว้

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs


42

เมื่อทำ ...

git checkout --ours someFile

ดูเหมือนว่ามันจะไม่ได้ทำอะไรเลยเมื่อทำสถานะคอมไพล์

เพียงจำไว้ว่าให้ทำเช่นนี้ในภายหลัง

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