ในกรณีส่วนใหญ่ 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 แล้ว