Skip to Content

Merge & Rebase

Merge là gì?

Merge là kết hợp thay đổi từ một branch vào branch khác. Khi merge, Git tạo một “merge commit” mới kết hợp lịch sử của cả hai branch.

Các loại Merge

Fast-forward Merge

Khi branch đích không có commit mới, Git chỉ di chuyển con trỏ về phía trước.

Before: main: A---B \ feature: C---D After merge: main: A---B---C---D

Three-way Merge

Khi cả hai branch đều có commit mới, Git tạo merge commit.

Before: main: A---B---E \ feature: C---D After merge: main: A---B---E---M (merge commit) \ / feature: C---D

Thực hiện Merge

# Chuyển về branch đích git checkout main # Merge branch feature vào git merge feature-login

Merge với message

git merge feature-login -m "Merge feature-login into main"

Xử lý Conflict

Conflict xảy ra khi cùng một dòng code bị thay đổi ở cả hai branch.

Dấu hiệu conflict

<<<<<<< HEAD code từ branch hiện tại ======= code từ branch đang merge >>>>>>> feature-login

Giải quyết conflict

  1. Mở file có conflict
  2. Chọn code muốn giữ (hoặc kết hợp)
  3. Xóa các dấu <<<<<<<, =======, >>>>>>>
  4. Stage và commit:
git add . git commit -m "Resolve merge conflict"

Rebase là gì?

Rebase là di chuyển toàn bộ branch lên đầu branch khác. Thay vì tạo merge commit, rebase viết lại lịch sử.

Before: main: A---B---E \ feature: C---D After rebase: main: A---B---E \ feature: C'---D'

Thực hiện Rebase

# Đang ở branch feature git checkout feature-login git rebase main

Interactive Rebase

Cho phép chỉnh sửa, gộp, xóa commits:

git rebase -i HEAD~3

Các tùy chọn:

  • pick - Giữ commit
  • reword - Đổi message
  • squash - Gộp với commit trước
  • drop - Xóa commit

Merge vs Rebase

MergeRebase
Giữ nguyên lịch sửViết lại lịch sử
Tạo merge commitKhông tạo commit mới
An toàn cho public branchChỉ dùng cho private branch
Lịch sử phức tạpLịch sử sạch, tuyến tính

⚠️ Quy tắc vàng: Không rebase các branch đã push lên remote và có người khác đang dùng!

Tiếp theo

Học về Remote Repository để làm việc với GitHub và các remote khác.

Last updated on