เมื่อใช้โปรแกรมแก้ไขมีวิธีใดในการแก้ไขข้อขัดแย้งหรือไม่?


124

ฉันอยู่บน windows

ด้วยเหตุผลหลายประการเรามีอินสแตนซ์ git หลายสาขาของ svn ที่แตกต่างกัน

หลายครั้งฉันต้องการแก้ไขปัญหาในที่เก็บ A สร้างโปรแกรมแก้ไขและนำไปใช้กับที่เก็บ B ซึ่งใช้งานได้ดียกเว้นหากมีข้อขัดแย้ง

เมื่อทำการ rebasing ฉันเพียงแค่คลิกขวาที่โฟลเดอร์และใช้ tortioseGit และเลือกตัวเลือกการแก้ไข นี่เป็นการแสดงกุยที่ดีเพื่อให้ฉันแก้ไขความขัดแย้งของฉันได้

มีวิธีใดบ้างที่จะทำสิ่งนี้ให้สำเร็จด้วยชิ้นส่วนที่ถูกปฏิเสธ?

นี่คือแนวทางปัจจุบันของฉันในการสร้าง / ใช้แพตช์

git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch

3
ฉันมักจะทำด้วยมือเมื่อตัวเลือกการแก้ไขทั้งหมดล้มเหลว ...
stdcall

หากการผสานล้มเหลวนั่นเป็นเพราะโปรแกรมไม่สามารถหาวิธีการผสานที่ไม่คลุมเครือได้ คุณควรได้รับไฟล์ที่มีชุด <<<<, ===, >>>> และคุณต้องเข้าไปแก้ไขด้วยมือ
tacaswell

ใช่การทำด้วยมือเป็นไฟลนก้นที่แท้จริงเมื่อคุณพูดถึง rej hunks ไม่กี่ 100 ตัว
Kenoyer130

นั่นคือเวลาที่คุณต้องการใช้git mergetoolและทำการผสาน 3 ทางกับ gui ที่คุณเลือก (ฉันเป็นบางส่วนของ kdiff บน windows) ...
g19fanatic

คำตอบ:


254

ในการสร้างโปรแกรมแก้ไขของคุณให้ทำดังต่อไปนี้:

git format-patch --stdout first_commit^..last_commit > changes.patch

ตอนนี้เมื่อคุณพร้อมที่จะใช้แพตช์:

git am -3 < changes.patch

-3จะทำผสานสามทางหากมีความขัดแย้ง ณ จุดนี้คุณสามารถทำได้git mergetoolถ้าคุณต้องการที่จะไปกุยหรือเพียงแค่ตนเองรวมไฟล์โดยใช้เสียงเรียกเข้า (มาตรฐาน<<<<<<, ||||||, >>>>>>การแก้ไขความขัดแย้ง)


3
มันอาจจะเป็นประโยชน์ในการเพิ่ม--ignore-whitespace --ignore-space-changeการgit amมากเกินไป ฉันมีการผสานเล็กน้อยที่ไม่สามารถทำได้โดยปราศจากมัน
angularsen

12
git apply -3 changes.patchดูเหมือนจะได้ผลสำหรับฉันเช่นกัน
peterflynn

1
แม้ว่าแพทช์ใช้ไม่ได้หมดจดฉันยังคงได้รับ "ไม่มีไฟล์ที่จำเป็นต้องควบรวม" git mergetoolจาก แต่ฉันต้องหาฐานที่ยอมรับแพตช์ดั้งเดิมที่ใช้อยู่ให้ใช้ด้านบนของสิ่งนั้น (โชคดีที่ repo ของฉันมีสิ่งนี้) แล้วจึงทำการ rebase
jozxyqk

4
ฉันมีปัญหาเดียวกันกับ @jozxyqk ทั้งgit am -3มิได้git apply -3จริงจะวางเครื่องหมายความขัดแย้งลงไปในแฟ้มของฉันแม้ว่าฉันได้รับข้อความเหมือนและApplied patch to 'configure.ac' with conflicts. นี้คือบนerror: patch failed: ... git 2.17.1บางทีเมื่อบางไฟล์ไม่สามารถแก้ไขได้เลย git จะย้อนกลับ?
2

1
ฉันมีปัญหาเดียวกันกับ @ nh2 คุณเคยพบปัญหาหรือไม่
Eridanis

12

หากคุณพบปัญหาในชุดความขัดแย้งเดียวกันบ่อยๆเมื่อใช้แพตช์การปรับขนาดใหม่หรือการรวมคุณสามารถใช้ฟังก์ชัน git rerere (ใช้ความละเอียดที่บันทึกซ้ำ) ได้ วิธีนี้ช่วยให้คุณกำหนดล่วงหน้าได้ว่าจะแก้ไขความขัดแย้งอย่างไรโดยพิจารณาจากวิธีที่คุณแก้ไขในอดีต ดูhttp://git-scm.com/blog/2010/03/08/rerere.htmlสำหรับรายละเอียดวิธีการทำงาน


5

TortoiseGit มีคุณสมบัติการผสานที่สามารถเปิดไฟล์แพตช์

มีภาพของมันนี่


จริงๆแล้วตัวเลือกการผสานอาจเป็นสิ่งที่ฉันกำลังมองหา
Kenoyer130

จริงๆ? ฉันไม่ได้ใช้เต่ามานานแล้ว แต่หน้าที่เชื่อมโยงมีข้อความว่า "TortoiseMerge สามารถเปิดไฟล์ Git patch ได้โดยตรงคุณตรวจสอบและแก้ไขเป็นสำเนาที่ใช้งานได้" ดังนั้นจึงดูเหมือนว่าควรจะเป็น!
AMS

มันเปิดไฟล์แพทช์ ... อย่างไรก็ตามบางครั้งรูปแบบไฟล์แพทช์จะทำให้เต่า ฉันไม่เคยประสบความสำเร็จกับ diff -u แต่เป็นเอาต์พุต diff -c มากกว่า
thistleknot

คุณยังสามารถลากแพตช์ไปทางขวาบนโฟลเดอร์แผนผังการทำงานและเลือก "ใช้แพตช์อนุกรม" (สำหรับแพตช์เช่น 0001-xxx.patch, ... 0002-xxy.patch) หรือ "ใช้ไฟล์แพทช์เดียว"
MrTux

2

แนวทางของฉันคือ:

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