ทำความเข้าใจประเภทของการ Merge

Git ขั้นสูง

Amanda Crawford-Adamo

Software and Data Engineer

ฉันชื่อ Amanda

รูปภาพของ Amanda

Git ขั้นสูง

git merge คืออะไร?

คำสั่ง Git Merge:

git merge
  • รวมการเปลี่ยนแปลงจาก branch หนึ่งเข้าอีก branch
  • ค้นหา base ร่วมระหว่างสอง branch
  • ใช้กลยุทธ์การ merge ได้หลายแบบ

ภาพถนนที่มีสองเส้นทางมาบรรจบกัน โดยมีรถสองคันอยู่บนถนนเส้นเดียวกัน

Git ขั้นสูง

Fast-forward merge

Fast forward merge คืออะไร?

  • รักษาประวัติให้เรียบง่ายและเป็นเส้นตรง
  • เหมาะกับ branch อายุสั้นที่มีการเปลี่ยนแปลงเล็กน้อย

$$

เมื่อไม่ควรใช้

  • ต้องการเก็บรักษาประวัติของ branch ไว้
  • พัฒนาฟีเจอร์ซับซ้อนใน branch ที่ใช้งานระยะยาว
  • มี merge conflict ระหว่าง branch — fast forward จะล้มเหลวทันที!
Git ขั้นสูง

Fast-forward merge (ก่อน merge)

กราฟแสดงสอง branch ได้แก่ main และ feature branch โดย main มีสอง commit และ feature branch แยกออกหลัง commit ล่าสุดของ main โดยมี commit เพิ่มเติมหนึ่งรายการใน branch ของตัวเอง

Git ขั้นสูง

ไวยากรณ์ Fast-forward merge

Fast Forward แบบค่าเริ่มต้น

git checkout main
git merge feature_branch

บังคับให้ Fast Forward

git merge <branch> --ff-only

ตัวอย่าง

git checkout main
git merge feature_branch --ff-only
Git ขั้นสูง

Fast-forward merge (หลัง merge)

กราฟแสดงสอง branch ได้แก่ main และ feature branch โดย main มีสาม commit และ feature branch แยกออกหลัง commit ที่สองของ main โดยมี commit เพิ่มเติมหนึ่งรายการ commit ที่สามของ main เป็นสำเนาของ commit ล่าสุดของ feature branch

Git ขั้นสูง

Recursive merge

Recursive merge คืออะไร?

  • สร้าง merge commit ที่มีสอง parent
  • เก็บรักษาประวัติทั้งหมดของโปรเจกต์
  • เหมาะกับ branch ที่ใช้งานระยะยาว
  • รักษาโครงสร้าง branch ไว้

$$

เมื่อไม่ควรใช้

  • ต้องการให้ประวัติเรียบง่ายและเป็นเส้นตรง
  • การเปลี่ยนแปลงเล็กน้อยและรวดเร็ว
Git ขั้นสูง

Recursive merge (ก่อน merge)

กราฟแสดงสอง branch ได้แก่ main และ feature branch โดย main มีสาม commit และ feature branch แยกออกหลัง commit แรกของ main โดยมี commit เพิ่มเติมสองรายการใน branch ของตัวเอง

Git ขั้นสูง

ไวยากรณ์ Recursive merge

คำสั่ง Recursive Merge:

git merge --no-ff <branch>

ตัวอย่าง

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge --no-ff feature_branch
Merge made by the 'recursive' strategy.
...
Git ขั้นสูง

Recursive merge (หลัง merge)

กราฟแสดงสอง branch ได้แก่ main และ feature branch โดย main มีหก commit และ feature branch แยกออกหลัง commit ล่าสุดของ main โดยมี commit เพิ่มเติมสองรายการ commit ทั้งหกของ main เป็นการสลับกันระหว่าง commit ของ main และ feature รวมกัน commit ล่าสุดของ main คือ merge commit object ที่มีสอง parent ได้แก่ commit ล่าสุดของ feature branch และ commit ก่อนหน้าล่าสุดของ main

Git ขั้นสูง

สรุป

  • Fast forward merge รักษาประวัติให้เรียบง่ายและเป็นเส้นตรง
  • Recursive merge เก็บรักษาบริบทประวัติทั้งหมดไว้
  • Recursive merge เหมาะกับการพัฒนาที่มีความซับซ้อนมากกว่า

คำสั่ง Fast Forward Merge

git merge <branch_name> # default command
git merge --ff-only <branch_name> # force fast forward merge

คำสั่ง Recursive Merge

git merge --no-ff <branch_name>
Git ขั้นสูง

มาฝึกกันเถอะ!

Git ขั้นสูง

Preparing Video For Download...