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---DThree-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---DThực hiện Merge
# Chuyển về branch đích
git checkout main
# Merge branch feature vào
git merge feature-loginMerge 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-loginGiải quyết conflict
- Mở file có conflict
- Chọn code muốn giữ (hoặc kết hợp)
- Xóa các dấu
<<<<<<<,=======,>>>>>>> - 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 mainInteractive Rebase
Cho phép chỉnh sửa, gộp, xóa commits:
git rebase -i HEAD~3Các tùy chọn:
pick- Giữ commitreword- Đổi messagesquash- Gộp với commit trướcdrop- Xóa commit
Merge vs Rebase
| Merge | Rebase |
|---|---|
| Giữ nguyên lịch sử | Viết lại lịch sử |
| Tạo merge commit | Không tạo commit mới |
| An toàn cho public branch | Chỉ dùng cho private branch |
| Lịch sử phức tạp | Lị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