8 มิ.ย. เวลา 11:01 • การศึกษา
Git By Shoper Gamer

Git Rebase คืออะไร

โดย
สำหรับนักพัฒนาโปรแกรมที่ใช้ Git คำสั่ง `git rebase` เป็นหนึ่งในเครื่องมือทรงพลังที่ช่วยจัดการประวัติการ Commit ให้เป็นระเบียบ และ เข้าใจง่าย แต่ก็อาจทำให้เกิดความสับสนได้หากใช้งานไม่ถูกต้อง บทความนี้จะอธิบายหลักการทำงาน ประเภท ประโยชน์ และตัวอย่างการใช้งาน `git rebase` อย่างละเอียด
  • ​Git Rebase คืออะไร
`git rebase` เป็นคำสั่งที่ใช้สำหรับปรับโครงสร้างประวัติ Commit โดยการย้าย หรือ รวม Commit จาก Branch หนึ่งไปยังอีก Branch หนึ่ง ทำให้ประวัติการทำงานดูเป็นเส้นตรง (Linear History) และ ลดความซับซ้อนของ Branch ที่แตกออกมา
  • ​Git Merge กับ Git Rebase ต่างกันอย่างไร
☆ Merge
- สร้าง Merge Commit เพิ่มเข้ามา
- ประวัติการ Commit จะแสดงการแตก Branch ชัดเจน
- เหมาะเมื่อต้องการเก็บประวัติการทำงานทั้งหมด
☆ Rebase
- ย้าย Commit ไปต่อท้าย Branch ปลายทาง
- ทำให้ประวัติการ Commit เป็นเส้นตรง
- เหมาะเมื่อต้องการทำให้ประวัติอ่านง่ายขึ้น
  • ​Git Rebase ทำงานอย่างไร
1. เลือก Commit ที่ต้องการย้าย (จาก Branch ปัจจุบัน)
2. คำนวณความเปลี่ยนแปลง (Diff) ของแต่ละ Commit
3. นำความเปลี่ยนแปลงนั้นไปวางต่อท้าย Branch ปลายทาง
4. สร้าง Commit ใหม่ (มีเนื้อหาเหมือนเดิม แต่ Commit Hash เปลี่ยน)
```
Before Rebase:
A -- B -- C (main)
\
D -- E (feature)
After Rebase:
A -- B -- C -- D' -- E' (feature)
```
  • ​ประเภทของ Git Rebase
☆ 1. Standard Rebase
```bash
git checkout feature
git rebase main
```
- ย้าย Commit จาก Branch `feature` ไปต่อท้าย Branch `main`
☆ 2. Interactive Rebase (`-i`)
```bash
git rebase -i HEAD~3
```
- ปรับแต่ง Commit ก่อน Rebase เช่น:
○ squash : รวมหลาย Commit เป็น Commit เดียว
○ edit : แก้ไข Commit
○ drop : ลบ Commit
☆ 3. Rebase ขึ้น Remote Repository
```bash
git pull --rebase origin main
```
- ใช้เมื่อต้องการดึงโค้ดจาก Remote มาแล้ว Rebase ทับ Commit ของตัวเอง
  • ​ประโยชน์ของ Git Rebase
1. ทำให้ประวัติ Commit สะอาด และ เป็นเส้นตรง
2. ลดความซับซ้อนของ Branch ที่แตกออกมา
3. ช่วยแก้ไข Commit ที่ผ่านมา (เช่น ลบ Commit ที่ไม่จำเป็น)
4. เหมาะกับการทำงานเป็นทีม เพื่อลด Conflict ในอนาคต
  • ​ตัวอย่างการใช้งาน Git Rebase
☆ ตัวอย่างที่ 1: ย้าย Branch feature ไปต่อท้าย main
```bash
# สร้าง Branch feature จาก main
git checkout -b feature
# สร้าง Commit บน feature
echo "New feature" >> file.txt
git add file.txt
git commit -m "Add new feature"
# ย้าย feature ไปต่อท้าย main
git rebase main
```
☆ ตัวอย่างที่ 2: รวม Commit ด้วย Interactive Rebase
```bash
# ดูประวัติ Commit
git log --oneline
# a1b2c3d (HEAD -> feature) Update feature
# e4f5g6h Fix bug
# i7j8k9l Initial commit
# รวม 2 Commit ล่าสุด
git rebase -i HEAD~2
# ใน Editor เลือก 'squash' สำหรับ Commit ที่ต้องการรวม
```
☆ ตัวอย่างที่ 3: แก้ไข Commit ก่อนหน้า
```bash
git rebase -i HEAD~3
# เลือก 'edit' สำหรับ Commit ที่ต้องการแก้ไข
# แก้ไขไฟล์ที่ต้องการ
git add .
git commit --amend
git rebase --continue
```
  • ​ข้อควรระวังเมื่อใช้ Git Rebase
1. อย่า Rebase Commit ที่ถูก Push ไปแล้ว หากมีคนอื่นดึงโค้ดไปใช้งานแล้ว เพราะจะทำให้ประวัติสับสน
2. ใช้ `git pull --rebase` แทน `git pull` เพื่อป้องกัน Merge Commit ที่ไม่จำเป็น
3. Backup Branch ก่อน Rebase ด้วย `git branch backup-feature`
  • ​คำสั่ง Git Rebase ที่เกี่ยวข้อง
1. git rebase <branch>
- ใช้สำหรับย้าย Commit ไปต่อท้าย Branch ปลายทาง
2. git rebase -i
- ใช้ปรับแต่ง Commit แบบอินเทอร์แอคทีฟ (Interactive)
3. git rebase --abort
- ใช้ยกเลิกการ Rebase ที่กำลังทำอยู่
4. git rebase --continue
- ใช้ดำเนินการ Rebase ต่อหลังจากแก้ไข Conflict แล้ว
✏️ Shoper Gamer
Credit :
👇
  • ​https://tinyurl.com/mr2tnb2a
  • ​https://raksit31667.github.io/git-pull-vs-git-rebase
  • ​https://docs.github.com/articles/about-git-rebase
  • ​https://git-scm.com/book/en/v2/Git-Branching-Rebasing

ดูเพิ่มเติมในซีรีส์

โฆษณา