Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วิธีแก้ไขข้อขัดแย้ง Git Merge

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

ในคู่มือนี้ เราจะพูดถึงว่าการรวมคืออะไร ความขัดแย้งในการผสานคืออะไร และวิธีแก้ไขข้อขัดแย้งในการผสานคอมไพล์ของคุณ เริ่มกันเลย!

การผสานความขัดแย้งคืออะไร

ความขัดแย้งในการผสานเป็นที่ที่ Git ไม่สามารถรวมสองสาขาได้หากไม่ได้รับความช่วยเหลือจากคุณ

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

ความขัดแย้งในการผสานเกิดขึ้นในสองสถานการณ์:

  • สองสาขาได้เปลี่ยนรหัสบรรทัดเดียวกัน
  • สาขาหนึ่งได้ลบไฟล์ที่มีการเปลี่ยนแปลงในอีกสาขาหนึ่ง

เมื่อเกิดข้อขัดแย้งในการผสาน ข้อผิดพลาดจะแสดงใน Git สิ่งนี้บอกคุณว่า Git ไม่สามารถรวมสาขาได้สำเร็จ

วิธีแก้ไขข้อขัดแย้งของไฟล์ที่ถูกลบ

สาขา Git เป็นอิสระจากกัน ซึ่งหมายความว่านักพัฒนาสามารถลบไฟล์ออกจากสาขาหนึ่งได้โดยไม่กระทบต่ออีกสาขาหนึ่ง

ความขัดแย้งในการผสานอาจเกิดขึ้นได้หากมีการเปลี่ยนแปลงไฟล์บนสาขาหนึ่ง และไฟล์นั้นถูกลบออกจากสาขาอื่น เนื่องจาก Git ไม่รู้ว่าจะลบไฟล์หรือเปลี่ยนแปลงไฟล์

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

สมมติว่าเรามีสองสาขา:dev และ master ในสาขา dev เราได้ลบไฟล์ README.md ในสาขาหลัก เราได้เพิ่มข้อความใหม่

เราสามารถรวมสาขาเหล่านี้ได้โดยใช้คำสั่ง git merge:

git merge dev

การดำเนินการนี้จะรวมสาขา "dev" เข้ากับสาขาปัจจุบันของเรา ซึ่งเป็นสาขาหลัก รหัสของเราได้ส่งคืนข้อขัดแย้งในการผสาน:

Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

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

git add README.md

มิฉะนั้น ให้ใช้คำสั่ง git rm เพื่อลบออกจากที่เก็บของคุณ:

git rm README.md

rm command จะลบไฟล์ออกจากที่เก็บในเครื่องของคุณ ก่อนที่คุณจะใช้คำสั่ง rm ให้ตรวจสอบอีกครั้งเพื่อให้แน่ใจว่าคุณต้องการลบไฟล์

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

git add README.md
git commit -m "feat: Add README.md to repository"
git merge dev

คำสั่ง git add จะทำการเปลี่ยนแปลงของเรา คำสั่ง git commit สร้างการคอมมิตใหม่ คำสั่ง git merge จะรวม dev และ master branch ของเราเข้าด้วยกัน ขณะนี้สาขาของเราสามารถควบรวมกิจการได้ เนื่องจากเราได้แก้ไขข้อขัดแย้งในการควบรวมแล้ว

วิธีแก้ไขข้อขัดแย้งในการเปลี่ยนไฟล์

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

ในกรณีนี้ จะเกิดข้อขัดแย้งในการรวม สมมติว่าเรามีที่เก็บที่มีสองสาขา:master และ dev เราได้ทำการเปลี่ยนแปลงไฟล์ README.md ทั้งสองสาขาแล้ว สิ่งนี้ทำให้เกิดข้อขัดแย้งในการรวม:

Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

ขั้นตอนแรกคือการระบุสาเหตุของความขัดแย้งในการผสาน คุณสามารถทำได้โดยใช้คำสั่งสถานะ git:

On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:   README.md

จากข้อความนี้เราจะเห็นได้ว่าไฟล์ README.md ได้รับการแก้ไขแล้วทั้งสองสาขา ตอนนี้ เราต้องแก้ไขข้อขัดแย้งในการควบรวมกิจการ มาเปิดไฟล์ README.md ของเราโดยใช้โปรแกรมแก้ไขข้อความ:

This is a README.md file.
This is in a repository called merge-conflicts.
<<<<<<< HEAD
This file is on the main branch.
=======
This file is on the dev branch.
>>>>>>> dev

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

เครื่องหมายน้อยกว่า (<) แสดงถึงการเปลี่ยนแปลงที่ทำกับสาขาปัจจุบัน เครื่องหมายมากกว่า (>) บอกคุณถึงการเปลี่ยนแปลงที่ทำกับสาขาที่คุณพยายามรวมเข้ากับสาขาปัจจุบันของคุณ เครื่องหมายเท่ากับ (=) แยกความแตกต่างออก

ในกรณีนี้:

  • “ไฟล์นี้อยู่ที่สาขาหลัก” อยู่ในสาขาหลักของเรา (หรือ HEAD)
  • “ไฟล์นี้อยู่ในสาขา dev” อยู่ในสาขาการพัฒนาของเรา

ในการแก้ไขข้อขัดแย้งของเครื่องมือผสาน สิ่งที่คุณต้องทำคือลบข้อความที่คุณไม่ต้องการ สมมติว่าเราต้องการให้รหัสของเราพูดว่า:"ไฟล์นี้อยู่ในสาขา" เราสามารถแก้ไขได้ดังนี้:

This is a README.md file.
This is in a repository called merge-conflicts.
This file is on a branch.

เมื่อเราทำการเปลี่ยนแปลงเหล่านี้แล้ว เราก็พร้อมที่จะทำการผสานขั้นสุดท้าย มาแสดงการเปลี่ยนแปลงของเรา ส่งมอบให้กับที่เก็บของเรา และรวม dev . ของเรา และ master สาขา:

git add .
git commit -m "feat: Resolve merge conflict."
git merge dev

ตอนนี้เราได้แก้ไขข้อขัดแย้งในการผสานแล้ว โค้ดของเราจะผสานสำเร็จ

บทสรุป

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

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