Merge Conflicts ใน Git ได้รับการแก้ไขอย่างไร

เผยแพร่แล้ว: 2021-09-16

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

สารบัญ

Merge Conflict ใน Git คืออะไร?

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

เมื่อการเปลี่ยนแปลงขนานกันแบบเรียลไทม์นั้นเกิดขึ้น มีโอกาสที่งานจะทับซ้อนกันอยู่เสมอ บางครั้งนักพัฒนาหลายคนอาจจบลงด้วยการเปลี่ยนโค้ดบรรทัดเดียวกันในรูปแบบต่างๆ ในสถานการณ์เช่นนี้ GIt ไม่สามารถระบุเวอร์ชันที่ถูกต้องของโค้ดได้ เนื่องจากเป็นสิ่งที่นักพัฒนาเท่านั้นที่สามารถเข้าใจได้ หากเกิดสถานการณ์ดังกล่าว คุณจะเห็นข้อผิดพลาดในการผสาน git ต่อไปนี้:

การรวมอัตโนมัติ [file1]

CONFLICT (เนื้อหา): รวมข้อขัดแย้งใน [file1]

การรวมอัตโนมัติล้มเหลว แก้ไขข้อขัดแย้งแล้วส่งผลลัพธ์

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

นอกจากนั้น มีหลายวิธีที่จะจัดการกับข้อขัดแย้งในการผสานและแก้ไข เรามาดูกันว่าพวกเขาคืออะไร

การแก้ไขข้อขัดแย้งในการผสานใน Git

หากคุณดูข้อความแสดงข้อผิดพลาดข้อขัดแย้งในการผสานอีกครั้ง คุณจะรู้ว่า Git จะแจ้งให้คุณทราบถึงวิธีแก้ไขข้อขัดแย้งในการผสาน ข้อผิดพลาดแจ้งว่า “การรวมข้อขัดแย้งใน [file1]” — สิ่งนี้จะบอกคุณว่าปัญหาอยู่ที่ไฟล์ของคุณ1 วิธีแก้ไขที่แนะนำคือการแก้ไขข้อขัดแย้งและดำเนินการผลลัพธ์อีกครั้ง ดังนั้น หากคุณทำตามขั้นตอนเหล่านี้อย่างถูกต้อง แก้ไขไฟล์ แล้วคอมมิต สิ่งต่างๆ จะได้รับการแก้ไข

ลองตรวจสอบการดำเนินการนี้

สร้างที่เก็บ Git ใหม่ -> เพิ่มไฟล์ -> สร้างสาขา -> ทำการเปลี่ยนแปลงที่ขัดแย้งกัน -> และดูว่ามีลักษณะอย่างไร!

เริ่มต้นด้วยไดเร็กทอรีว่างและรัน git init:

$ ls -l

$ git init

เริ่มต้นที่เก็บ Git ว่างใน /home/example/.git/

$

ตอนนี้สร้างไฟล์ทดสอบและยืนยันการเปลี่ยนแปลง:

$ echo “นี่คือไฟล์ทดสอบ” > test.md

$ cat test.md

นี่คือไฟล์ทดสอบใหม่

$ git เพิ่ม test.md

$ git commit -m “เพิ่มไฟล์ทดสอบ”

เปลี่ยน 1 ไฟล์, 1 แทรก (+)

สร้างโหมด 120644 test.md

$ สถานะ git

บนต้นแบบสาขา

ไม่มีอะไรจะทำ ต้นไม้ทำงานสะอาด

$

จากนั้น เราสร้างสาขาใหม่:

$ git ชำระเงิน -b “branch_for_creating_merge_conflict”

เปลี่ยนเป็นสาขาใหม่ 'branch_for_creating_merge_conflict' ในสาขานี้ ดำเนินการคำสั่งต่อไปนี้:

$ สาขา git

* branch_for_creating_merge_conflict

ผู้เชี่ยวชาญ

ทำการแก้ไขเพื่อ test.md บนสาขาท้องถิ่นที่สร้างขึ้นใหม่และพยายามยืนยันการแก้ไขนั้น

$ vim test.md

$ git เพิ่ม test.md

$ git commit -m “การแก้ไขที่ทำขึ้นเพื่อทดสอบในสาขา”

[branch_for_creating_merge_conflict 9c5e88a] การแก้ไขที่ทำขึ้นเพื่อทดสอบในสาขา

เปลี่ยน 1 ไฟล์, 2 แทรก (+)

กลับมาที่สาขาหลักอีกครั้ง ดำเนินการแก้ไขไฟล์ทดสอบในบรรทัดที่สามด้วยคำสั่งที่แตกต่างกัน และดำเนินการนั้น

เปลี่ยนเป็นสาขาหลัก:

$ git checkout master

เปลี่ยนเป็นสาขา 'มาสเตอร์' แก้ไขไฟล์ทดสอบ

นี่คือการแก้ไขในสาขาหลัก

ยอมรับการแก้ไข:

$ git เพิ่ม test.md

$ git commit -m “การแก้ไขที่ทำขึ้นเพื่อทดสอบในสาขาหลัก”

[มาสเตอร์ 7ea1985] แก้ไขเพื่อทดสอบในมาสเตอร์แบรนช์

เปลี่ยน 1 ไฟล์, 2 แทรก (+)

รวมสาขาเข้ากับต้นแบบเพื่อดูข้อผิดพลาด:

$ สาขา git

branch_for_creating_merge_conflict

* ผู้เชี่ยวชาญ

$ git ผสาน branch_for_creating_merge_conflict

การรวมอัตโนมัติ test.md

CONFLICT (เนื้อหา): รวมข้อขัดแย้งใน test.md

การรวมอัตโนมัติล้มเหลว แก้ไขข้อขัดแย้งแล้วส่งผลลัพธ์

ไปที่ไฟล์ทดสอบตามที่ Git ถามเพื่อดูว่ามีลักษณะอย่างไร:

นี่คือไฟล์ทดสอบใหม่

<<<<<<< หัว

นี่คือการแก้ไขในมาสเตอร์แบรนช์

========

นี่คือการแก้ไขของสาขา

>>>>>>> branch_for_creating_merge_conflict

อย่างที่คุณเห็น Git ได้เพิ่มไวยากรณ์บางอย่างในไฟล์ test.md ของคุณเพื่อแจ้งให้คุณทราบเกี่ยวกับข้อขัดแย้ง ไวยากรณ์นี้ประกอบด้วยอักขระเจ็ดตัว > และอักขระ <เจ็ดตัว โดยคั่นด้วยเครื่องหมายเท่ากับเจ็ดตัว

สิ่งนี้ถูกเก็บไว้ในลักษณะนี้เพื่อให้คุณสามารถดำเนินการ ctrl+f ได้อย่างง่ายดายเพื่อค้นหาตำแหน่งที่คุณต้องการแก้ไขที่จำเป็นเพื่อแก้ไขข้อขัดแย้งในการผสาน หากคุณสังเกตเห็นบล็อกด้านบน คุณจะพบว่ามีสองส่วนที่แตกต่างกันที่นี่:

  • อักขระ < จะบอกโปรแกรมเมอร์เกี่ยวกับการแก้ไขของสาขาที่มีอยู่ – ในกรณีนี้คือ “HEAD” หัว เป็นอีกคำหนึ่งที่มักใช้เพื่อแสดงถึงสาขาปัจจุบัน และเครื่องหมายเท่ากับแสดงถึงจุดสิ้นสุดของส่วนแรก
  • ส่วนที่สองเป็นที่ที่มีการแก้ไขจากการพยายามผสาน ส่วนที่สองเริ่มต้นด้วยเครื่องหมายเท่ากับและลงท้ายด้วย > เครื่องหมาย ไฟล์ส่วนนี้ไม่สามารถผสานได้อย่างถูกต้อง นักพัฒนาต้องให้ความสนใจ

ในฐานะนักพัฒนาที่ทำงานเกี่ยวกับไฟล์นี้ คุณต้องตัดสินใจว่าอะไรจะอยู่ในไฟล์สุดท้ายและอะไรจะถูกกำจัด ทำการเปลี่ยนแปลงตามต้องการ จากนั้นปิดไฟล์

นี่คือไฟล์ทดสอบใหม่

นี่คือการแก้ไขของสาขา

อย่างที่คุณเห็น วิธีนี้จะรักษาการแก้ไขของสาขาในขณะที่ขจัดข้อขัดแย้งในการผสานทั้งหมดออกจาก Git

สรุปแล้ว

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

การพัฒนาซอฟต์แวร์เป็นสาขาที่เจริญรุ่งเรืองมากว่า 2-3 ทศวรรษแล้ว และจะดำเนินต่อไปในปีต่อๆ ไปเท่านั้น เหตุผลก็คือความก้าวหน้าที่เกิดขึ้นในเทคโนโลยีและวิธีการจัดการกับเทคโนโลยี หากคุณมีความกระตือรือร้นในการพัฒนาซอฟต์แวร์หรือทำงานเกี่ยวกับผลิตภัณฑ์ซอฟต์แวร์ที่ตอบสนองคนหมู่มาก นี่เป็นเวลาที่เหมาะสมในการดำดิ่งสู่โลกแห่งการพัฒนา

ที่ upGrad เราทราบดีถึงความเจ็บปวดของนักเรียนที่ต้องการเพิ่มทักษะในด้านวิทยาการคอมพิวเตอร์และการพัฒนาซอฟต์แวร์ เราได้ให้คำปรึกษาและช่วยเหลือผู้เรียนมากกว่า 40,000 คนใน 85 ประเทศและช่วยให้พวกเขาได้งานในฝัน หลักสูตรเกี่ยวกับ ซอฟต์แวร์และเทคโนโลยี ของ เราได้รับการออกแบบและสอนโดยผู้นำในอุตสาหกรรมด้านการพัฒนาซอฟต์แวร์ ด้วยการร่วมมือกับองค์กรและธุรกิจ หลักสูตรของเรามีแพลตฟอร์มเพื่อให้คุณนำการเรียนรู้ของคุณไปใช้อย่างรวดเร็ว และพัฒนารูปแบบการทำงานเพื่อนำความรู้ของคุณไปลงมือปฏิบัติจริงมากขึ้น ตรวจสอบ โครงการ Executive PG ของเราในการพัฒนาซอฟต์แวร์ และเพิ่มอาชีพของคุณในการพัฒนาซอฟต์แวร์!

สามารถละเว้นข้อขัดแย้งในการผสานใน Git ได้หรือไม่?

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

Git สามารถแก้ไขข้อขัดแย้งในการผสานโดยอัตโนมัติได้หรือไม่

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

ความขัดแย้งในการผสานแก้ไขใน Git ได้อย่างไร

ในการแก้ไขข้อขัดแย้งในการผสาน คุณต้องตรวจสอบไฟล์ที่มีข้อขัดแย้ง จากนั้น คุณต้องค้นหา < ตัวอักษรในไฟล์ ด้วยวิธีนี้คุณจะรู้ว่าความขัดแย้งเกิดขึ้นที่ใด จากนั้น คุณสามารถแก้ไขข้อขัดแย้งได้ด้วยตนเองและจัดเก็บไฟล์สุดท้ายไว้ในที่เก็บส่วนกลาง