git checkout
มี--ours
ตัวเลือกให้ตรวจสอบเวอร์ชันของไฟล์ที่คุณมีในเครื่อง (ตรงข้ามกับ--theirs
ซึ่งเป็นเวอร์ชันที่คุณดึงเข้าไป) คุณสามารถส่ง.
ต่อgit checkout
เพื่อบอกให้ตรวจสอบทุกอย่างในต้นไม้ จากนั้นคุณต้องทำเครื่องหมายข้อขัดแย้งตามที่ได้รับการแก้ไขซึ่งคุณสามารถทำได้git add
และมอบหมายงานของคุณเมื่อเสร็จแล้ว:
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
หมายเหตุ.
ในgit checkout
คำสั่ง มันสำคัญมากและพลาดง่าย git checkout
มีสองโหมด หนึ่งที่มันสลับสาขาและหนึ่งในนั้นจะตรวจสอบไฟล์จากดัชนีลงในสำเนาการทำงาน (บางครั้งดึงพวกเขาลงในดัชนีจากการแก้ไขอื่นก่อน) วิธีที่แตกต่างคือคุณได้ผ่านชื่อไฟล์แล้วหรือไม่ หากคุณไม่ได้ผ่านชื่อไฟล์มันจะพยายามสลับสาขา (แม้ว่าคุณจะไม่ผ่านสาขาก็จะลองตรวจสอบสาขาปัจจุบันอีกครั้ง) แต่ก็ปฏิเสธที่จะทำเช่นนั้นหากมีไฟล์ที่แก้ไข ที่จะมีผล ดังนั้นถ้าคุณต้องการที่พฤติกรรมที่จะเขียนทับไฟล์ที่มีอยู่คุณต้องผ่านในหรือชื่อไฟล์เพื่อให้ได้รับพฤติกรรมที่สองจาก.
git checkout
นอกจากนี้ยังเป็นนิสัยที่ดีที่จะมีเมื่อผ่านในชื่อไฟล์ที่จะชดเชยด้วยเช่น--
git checkout --ours -- <filename>
หากคุณไม่ทำเช่นนี้และชื่อไฟล์นั้นตรงกับชื่อของสาขาหรือแท็ก Git จะคิดว่าคุณต้องการตรวจสอบการแก้ไขนั้นแทนการตรวจสอบชื่อไฟล์นั้นและใช้รูปแบบแรกของcheckout
คำสั่ง .
ฉันจะขยายความเห็นของความขัดแย้งและการรวมการทำงานใน Git เมื่อคุณรวมในรหัสของผู้อื่น (ซึ่งเกิดขึ้นในระหว่างการดึงการดึงนั้นเป็นการนำการดึงข้อมูลตามด้วยการรวม) มีสถานการณ์ที่เป็นไปได้น้อย
ที่ง่ายที่สุดคือคุณอยู่ในการแก้ไขเดียวกัน ในกรณีนี้คุณเป็น "ทันสมัยอยู่แล้ว" และไม่มีอะไรเกิดขึ้น
ความเป็นไปได้อีกอย่างก็คือการแก้ไขของพวกเขาเป็นเพียงการสืบทอดของคุณซึ่งในกรณีนี้คุณจะมี "การผสานการกรอไปข้างหน้า" ซึ่งเป็นค่าเริ่มต้น HEAD
เพิ่งได้รับการอัปเดตเป็นคอมมิชชันโดยไม่มีการรวมเกิดขึ้น ต้องการบันทึกการผสานโดยใช้--no-ff
)
จากนั้นคุณจะเข้าสู่สถานการณ์ที่คุณจำเป็นต้องรวมการแก้ไขสองครั้ง ในกรณีนี้มีสองผลลัพธ์ที่เป็นไปได้ หนึ่งคือการผสานที่เกิดขึ้นอย่างหมดจด; การเปลี่ยนแปลงทั้งหมดอยู่ในไฟล์ที่แตกต่างกันหรืออยู่ในไฟล์เดียวกัน แต่ไกลพอที่จะใช้การเปลี่ยนแปลงทั้งสองชุดได้โดยไม่มีปัญหา ตามค่าเริ่มต้นเมื่อมีการผสานที่สะอาดแล้วจะมีการกำหนดโดยอัตโนมัติแม้ว่าคุณจะสามารถปิดการใช้งานนี้ได้--no-commit
หากคุณต้องการแก้ไขก่อน (เช่นหากคุณเปลี่ยนชื่อฟังก์ชันfoo
เป็นbar
และคนอื่นเพิ่มรหัสใหม่ที่โทรfoo
ก็จะผสานหมดจด แต่สร้างต้นไม้ที่เสียหายดังนั้นคุณอาจต้องการทำความสะอาดส่วนที่เป็นส่วนหนึ่งของการรวมเพื่อหลีกเลี่ยงการกระทำที่หัก)
ความเป็นไปได้สุดท้ายคือมีการผสานที่แท้จริงและมีความขัดแย้ง ในกรณีนี้ Git จะทำเท่าของการผสานเท่าที่จะสามารถและไฟล์ผลิตที่มีเครื่องหมายความขัดแย้ง ( <<<<<<<
, =======
และ>>>>>>>
) ในการคัดลอกการทำงานของคุณ ในดัชนี (หรือที่เรียกว่า "พื้นที่การแสดงละคร" สถานที่ที่จัดเก็บไฟล์git add
ก่อนที่จะส่งมอบ) คุณจะมี 3 เวอร์ชันของแต่ละไฟล์ที่มีข้อขัดแย้ง มีรุ่นดั้งเดิมของไฟล์จากบรรพบุรุษของทั้งสองสาขาที่คุณกำลังผสานรุ่นจากHEAD
(ด้านข้างของคุณผสาน) และรุ่นจากสาขาระยะไกล
ในการแก้ไขข้อขัดแย้งคุณสามารถแก้ไขไฟล์ที่อยู่ในสำเนาการทำงานของคุณลบเครื่องหมายความขัดแย้งและแก้ไขรหัสเพื่อให้ทำงานได้ หรือคุณสามารถตรวจสอบรุ่นจากหนึ่งหรือด้านอื่น ๆ ของการผสานการใช้หรือgit checkout --ours
git checkout --theirs
เมื่อคุณใส่ไฟล์ในสถานะที่คุณต้องการคุณจะระบุว่าคุณทำการผสานไฟล์เสร็จแล้วและพร้อมที่จะส่งมอบการใช้git add
งานจากนั้นคุณสามารถคอมมิวนิตี้การรวมgit commit
ได้