วิธีใช้ Git Merge

Dec 31, 2024
การเขียนโปรแกรม

GIT ใช้สาขาเพื่อแยกลำธารพัฒนาเพื่อป้องกันไม่ให้สาขาการปลดปล่อยที่มั่นคงกลายเป็นมลพิษ การนำงานในสาขาเข้าสู่กระแสหลักหมายถึงการรวมสาขา นี่คือวิธีที่คุณทำ

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

การผสานใน Git คืออะไร?

Git ได้รับการออกแบบมาเพื่อทำให้การแตกแขนงง่ายและรวดเร็ว ตรงกันข้ามกับระบบควบคุมรุ่นอื่น ๆ การแตกแขนงบน Git เป็นเรื่องเล็กน้อย ในโครงการที่มีหลายนักพัฒนาโดยเฉพาะการแตกแขนงเป็นหนึ่งในเครื่องมือหลักขององค์กรหลักของ GIT

Branches Sandbox ความพยายามในการพัฒนาใหม่เพื่อให้สามารถแก้ไขหรือเพิ่มรหัสโดยไม่ส่งผลกระทบต่อรหัสในสาขาอื่น ๆ โดยเฉพาะสาขาหลักหรือสาขาหลัก ซึ่งมักจะมีฐานรหัสที่เสถียรของคุณ

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

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

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

เตรียมที่จะรวมสาขาใน Git

เรามีโครงการพัฒนาขนาดเล็กที่มีที่เก็บ Git ท้องถิ่นและที่เก็บ GIT ระยะไกล เราสร้างสาขาที่เรียกว่า“ BugFix14” จากสาขา“ Master” และทำงานเพื่อแก้ปัญหาข้อผิดพลาด

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

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

  • บน Branch Bugfix14 : นี่คือสาขาปัจจุบันของเรา
  • สาขาของคุณทันสมัยด้วย 'Origin/Bugfix' : สาขาในพื้นที่เก็บข้อมูลท้องถิ่นของเรามีประวัติการกระทำเช่นเดียวกับสาขาในที่เก็บระยะไกล นั่นหมายความว่าพวกเขาเหมือนกัน
  • ไม่มีอะไรจะกระทำ ไม่มีการเปลี่ยนแปลงในพื้นที่จัดเตรียมที่ยังไม่ได้กระทำ
  • ต้นไม้ทำงานสะอาด : ไม่มีการเปลี่ยนแปลงที่ไม่มีการเปลี่ยนแปลงในไดเรกทอรีการทำงาน

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

ตรวจสอบสาขาที่เราจะรวมเข้ากับกระบวนการที่รวมกันง่ายขึ้น นอกจากนี้ยังช่วยให้เราสามารถตรวจสอบได้ว่าทันสมัย มาดูสาขาหลักกันเถอะ

เราได้รับการยืนยันแบบเดียวกับที่สาขา“ Master” เป็นปัจจุบัน

ที่เกี่ยวข้อง: วิธีเลือกเวิร์กโฟลว์ Git & amp; รูปแบบการแตกแขนงที่เหมาะกับทีมของคุณ

ทำการผสาน

สาขา“ Bugfix14” ถูกแยกออกจากสาขา“ Master” มีการสร้างความมุ่งมั่นไปยังสาขา“ อาจารย์” หลังจากสร้างสาขา“ Bugfix14” มีการกระทำสองสามข้อในสาขา“ Bugfix14”

เราตรวจสอบให้แน่ใจว่าสาขาทั้งสองของเราทันสมัยและเราได้ตรวจสอบสาขา "มาสเตอร์" เราสามารถออกคำสั่งเพื่อรวมสาขา“ BugFix14” เข้ากับสาขา“ Master”

การผสานเกิดขึ้น สาขา“ Bugfix14” ยังคงมีอยู่ แต่ตอนนี้การเปลี่ยนแปลงที่เกิดขึ้นในสาขานั้นได้ถูกรวมเข้ากับสาขา“ Master”

ในอินสแตนซ์นี้คำสั่ง Merge ดำเนินการ ผสานสามทาง . มีเพียงสองสาขา แต่มีสามข้อตกลงที่เกี่ยวข้อง พวกเขาเป็นหัวหน้าสาขาหนึ่งและหนึ่งในสามที่แสดงถึงการกระทำที่ผสาน

ในการอัปเดตที่เก็บระยะไกลของเราเราสามารถใช้ไฟล์ Git Push สั่งการ.

บางคนชอบที่จะลบสาขาด้านข้างเมื่อพวกเขารวมกัน คนอื่น ๆ ดูแลรักษาพวกเขาให้เป็นบันทึกประวัติศาสตร์การพัฒนาที่แท้จริงของโครงการ

หากคุณต้องการลบสาขาคุณสามารถทำได้โดยใช้ไฟล์ กิ่งก้าน คำสั่งด้วย -d ตัวเลือก (ลบ)

ถึง ลบสาขา ในพื้นที่เก็บข้อมูลระยะไกลใช้คำสั่งนี้:

คุณจะมีประวัติศาสตร์การกระทำเชิงเส้น แต่มันจะไม่ใช่ประวัติศาสตร์ที่แท้จริง

ที่เกี่ยวข้อง: วิธีการลบกิ่งก้านในที่เก็บในท้องถิ่นและระยะไกล

ทำการรวมตัวกันอย่างรวดเร็วใน Git

หากคุณยังไม่ได้ทำอะไรกับสาขา“ อาจารย์” ประวัติของคุณจะมีลักษณะเช่นนี้ มันจะดูสิ่งนี้หากคุณมี ทำให้เกิดขึ้นใหม่ สาขาการพัฒนาของคุณเพื่อให้ติดอยู่กับจุดสิ้นสุดของสาขา "อาจารย์"

เนื่องจากไม่มีความมุ่งมั่นในสาขา“ Master” ในการรวมสาขา“ Bugfix15” Git ทั้งหมดต้องทำคือชี้ตัวชี้หัว“ ต้นแบบ” ไปยังการกระทำสุดท้ายของสาขา“ Bugfix15”

Git จะทำการผสานอย่างรวดเร็ว เมื่อใดก็ตามที่ทำได้ . หากมุ่งไปที่สาขา“ Master” หมายถึงการผสานที่รวดเร็วไปข้างหน้าไม่สามารถทำได้ GIT จะใช้ก ผสานสามทาง .

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

สิ่งนี้จะรวมสาขา“ Bugfix15” เข้ากับสาขา“ Master” แต่เฉพาะในกรณีที่การผสานที่รวดเร็วไปข้างหน้า

ในกรณีนี้มีการมุ่งมั่นที่สาขา "อาจารย์" ดังนั้นการผสานที่รวดเร็วไปข้างหน้าจึงไม่สามารถทำได้

วิธีแก้ไขความขัดแย้งในการผสานใน Git

หากส่วนเดียวกันของไฟล์เดียวกันมีการเปลี่ยนแปลงในทั้งสองสาขาสาขาไม่สามารถรวมกันได้ การปฏิสัมพันธ์ของมนุษย์จำเป็นต้องมีการแก้ไขการแก้ไขที่ขัดแย้งกัน

ที่นี่เราได้ทำการเปลี่ยนแปลงไฟล์ที่เรียกว่า "rot.c" ในสาขาที่เรียกว่า "Bugfix17" ที่เราต้องการรวมเข้ากับสาขา "Master" แต่“ rot.c” ได้รับการเปลี่ยนแปลงในสาขา“ Master” เช่นกัน

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

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

ความขัดแย้งแต่ละอย่างถูกล้อมรอบด้วยตัวละครน้อยกว่าเจ็ดตัว” & lt; & lt; & lt; & lt; & lt; & lt; & lt; ” และตัวละครที่ยิ่งใหญ่กว่าเจ็ดตัว” & gt; & gt; & gt; & gt; & gt; & gt; & gt; “ ด้วยสัญญาณเท่ากับเจ็ดอัน” ======= " ระหว่างพวกเขา.

  • รหัสด้านบนสัญญาณเท่ากับมาจากสาขาที่คุณรวมเข้าด้วยกัน เข้าไปข้างใน .
  • รหัสด้านล่างเครื่องหมาย Equals คือรหัสจากสาขาที่คุณพยายามทำ ผสาน .

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

เราจะเก็บรหัสจากสาขา“ BugFix17” หลังจากแก้ไขไฟล์ของเราจะเป็นแบบนี้

ตอนนี้เราสามารถดำเนินการต่อไปด้วยการผสาน แต่หมายเหตุเราใช้ไฟล์ ให้สัญญา คำสั่งให้ทำเช่นนั้นไม่ใช่ ผสาน สั่งการ.

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

การผสานเสร็จสมบูรณ์ ตอนนี้เราสามารถผลักสิ่งนี้ไปยังที่เก็บระยะไกลของเรา

ที่เกี่ยวข้อง: วิธีแก้ไขแก้ไขหรือเลิกทำ GIT Commits (เปลี่ยนประวัติ GIT)

ทุกอย่างรวมกันในที่สุด

สาขาทั้งหมดจะต้องถูกรวมเข้าด้วยกันในที่สุดเพื่อให้การเปลี่ยนแปลงในพวกเขาไม่กลายเป็นเด็กกำพร้าและลืม

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

  • วิธีเปลี่ยนชื่อสาขาใน Git
  • วิธีชำระเงินสาขา Git ระยะไกล
  • วิธีซ่อนการเปลี่ยนแปลงใน Git
  • วิธีเปลี่ยนกิ่งใน GitHub
  • Git Rebase: ทุกสิ่งที่คุณต้องรู้
  • OnePlus 11 อยู่ที่นี่ แต่ด้วยการเริ่มต้นคร่าวๆ
  • Microsoft Edge ได้รับการแชท AI และรูปลักษณ์ใหม่บน Windows
  • หูฟังที่ดีที่สุดสำหรับแฟน ๆ iPhone เพียงแค่ราคาต่ำสุดของพวกเขา

การเขียนโปรแกรม - บทความยอดนิยม

วิธีเปลี่ยนชื่อสาขาใน Git

การเขียนโปรแกรม Dec 19, 2024

การแตกแขนงเป็นการออกกำลังกายเล็กน้อยใน Git น่าเสียดายที่งานเล็ก ๆ น้อ..


หมวดหมู่