คุณจะใช้ไฟล์ git diff และนำไปใช้กับสาขาโลคัลที่เป็นสำเนาของที่เก็บเดียวกันได้อย่างไร?


491

ฉันมีไฟล์. diff ที่สร้างขึ้นโดยผู้ร่วมงานและต้องการใช้การเปลี่ยนแปลงที่ระบุไว้ในไฟล์ diff กับสาขาท้องถิ่นของฉันของที่เก็บเดียวกัน ฉันไม่สามารถเข้าถึงพีซีหรือสาขาของคนงานที่ใช้สร้างไฟล์ต่างนี้

เห็นได้ชัดว่าฉันสามารถไปทีละบรรทัดและพิมพ์ใหม่ทุกอย่าง แต่ฉันไม่อยากให้ระบบผิดพลาดจากมนุษย์ วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?

คำตอบ:


746

คัดลอกไฟล์ diff ไปยังรูทของที่เก็บของคุณจากนั้นทำ:

git apply yourcoworkers.diff

ข้อมูลเพิ่มเติมเกี่ยวกับapplyคำสั่งที่มีอยู่บนหน้าคนของตน

โดยวิธีการ: วิธีที่ดีกว่าในการแลกเปลี่ยนการคอมมิททั้งหมดด้วยไฟล์คือการรวมกันของคำสั่งgit format-patchในผู้ส่งและgit amผู้รับ

หากแอปพลิเคชันโปรแกรมแก้ไขล้มเหลวและหากการยอมรับส่วนต่างที่สร้างขึ้นนั้นเป็นจริงใน repo ของคุณคุณสามารถใช้-3ตัวเลือกapplyที่พยายามผสานในการเปลี่ยนแปลง

มันยังใช้งานได้กับท่อ Unix ดังนี้

git diff d892531 815a3b5 | git apply

3
ขอบคุณสำหรับการตอบกลับ แต่นั่นทำให้เกิดข้อผิดพลาดในการพูดว่า patch ล้มเหลว: filename.php: 202 ข้อผิดพลาด: filename.php: patch ใช้ไม่ได้ ข่าวดีก็คือไม่ใช่ชื่อไฟล์แรกในไฟล์ดังนั้นอย่างน้อยก็น่าจะสามารถประมวลผลไฟล์บางไฟล์ได้ ความคิดใด ๆ
Mike_K

4
ดูเหมือนว่าคุณจะมีการเปลี่ยนแปลงไฟล์ที่หยุดการทำงานของแพตช์ ในการแก้ปัญหานี้คุณสามารถคอมมิชชันการเปลี่ยนแปลงของคุณสร้างสาขาใหม่รีเซ็ตเป็นคอมมิชชันที่คุณและเพื่อนร่วมงานของคุณแยกใช้แพทช์กระทำและจากนั้นผสานทั้งสองสาขา
ฟิลิปป์

3
@orlybg เมื่อคุณยังไม่ยอมรับให้ทำgit reset --hardเพื่อส่งแผนผังการทำงานของคุณเป็นคอมมิทสุดท้าย เมื่อคุณยืนยันแล้วให้ผนวกการแก้ไขที่คุณต้องการกลับไป
Philipp

5
@orlybg ขออภัย แต่คุณเมาแล้ว Git จะสร้างจุดตรวจสอบที่คุณสามารถกลับไปได้เมื่อคุณส่งมอบ นั่นเป็นเหตุผลที่คู่มือการคอมไพล์จำนวนมากแนะนำให้กระทำต้นและมักจะ
ฟิลิปป์

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