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 ได้อย่างไร