HocTotGit.io

Git nâng cao (Advanced)
  • Lý thuyết về rebase
  • Thực hiện Rebase
  • Giải quyết conflict khi rebase
  • Rebase vs Merge
  • Quiz
  • Rebase interactive
  • Thay đổi commit message
  • Xóa commit
  • Sắp xếp lại commit
  • Squash commit
  • Chia nhỏ commit
  • Quiz
Liên kết
Blog
Hỗ trợ

Email: work.lamsun@gmail.com

Yêu thích nền tảng

Hãy chia sẻ ý kiến của bạn

HocTotGit.io

© 2026 HocTotGit.

So sánh Rebase và Merge

1. Tổng quan

Merge và rebase đều được sử dụng để tích hợp các thay đổi từ một branch sang branch khác; tuy nhiên, chúng đạt được mục đích này theo những cách khác nhau.

Hãy xét tình huống: một thành viên trong team tạo một topic branch mới từ main. Khi các thành viên khác push thay đổi lên main, topic branch đó sẽ trở nên lỗi thời vì checkout từ phiên bản code cũ. Cả merge và rebase đều có thể được sử dụng để giữ cho topic branch luôn cập nhật.


2. Merge

2.1. Các lệnh

Để tích hợp nội dung của branch main vào topic branch:

git switch topic
git merge main

Kết quả là một commit gộp được đặt ở đầu topic branch, commit này bao gồm các thay đổi mới từ main kể từ khi topic branch được tạo ra.


3. Rebase

3.1. Các lệnh

Để tích hợp nội dung của topic branch vào branch main:

git switch topic
git rebase main

4. Bảng so sánh

Tiêu chíMergeRebase
Thay đổi lịch sửKhông thay đổi lịch sử, giữ nguyên các commit gốcViết lại lịch sử, tạo các commit mới
Lịch sử dự ánCó thể làm lộn xộn với nhiều nhánh và commit gộpSạch sẽ, tuyến tính, dễ theo dõi
An toàn cho branch chia sẻAn toàn, không lo ghi đè công việcKhông an toàn, không nên dùng cho branch chia sẻ
Giữ ngữ cảnhGiữ lại ngữ cảnh về cách giải quyết xung độtMất ngữ cảnh vì thay thế commit cũ
Giải quyết xung độtGiải quyết tất cả xung đột cùng một lúcGiải quyết từng xung đột một cách tăng dần
Commit tạo raTạo commit gộp mớiKhông tạo commit gộp, chỉ di chuyển commit
Phù hợp vớiBranch được chia sẻ, branch sống lâuBranch cá nhân, muốn lịch sử sạch sẽ

5. Sử dụng Merge và Rebase cùng nhau

Thay vì chọn một trong hai, bạn có thể kết hợp cả merge và rebase trong quy trình làm việc của mình để tận dụng ưu điểm của cả hai. Dưới đây là một quy trình được đề xuất:

5.1. Tạo một branch

Khi bạn sẵn sàng bắt đầu làm việc trên một tính năng mới, sửa lỗi, v.v., hãy tạo một topic branch mới:

git checkout -b <topic-branch>

5.2. Giữ branch luôn cập nhật

Nếu branch được tạo ở bước 1 tách ra từ một source-branch được chia sẻ, các cộng tác viên khác sẽ thêm commit vào source branch đó. Định kỳ sử dụng rebase để giữ branch của bạn luôn cập nhật với các thay đổi mới:

git rebase <source-branch>

5.3. Tận dụng gộp nhanh

Khi việc phát triển trên branch của bạn hoàn tất, hãy sử dụng merge để tích hợp các thay đổi trở lại vào source branch. Vì rebase đã được sử dụng để giữ topic branch của bạn cập nhật, một gộp nhanh sẽ có thể thực hiện được:

git switch <source-branch>
git merge <topic-branch>

Lợi ích của quy trình này:

  • Bạn giữ được lịch sử sạch sẽ nhờ rebase trong quá trình phát triển
  • Bạn tránh được việc viết lại lịch sử trên các branch được chia sẻ bằng cách sử dụng merge ở bước cuối
  • Gộp nhanh đảm bảo không có commit gộp không cần thiết

6. Khi nào nên dùng Merge, khi nào nên dùng Rebase?

Nên dùng Merge khi:

  • Bạn đang làm việc trên một branch được chia sẻ công khai
  • Bạn muốn giữ lại toàn bộ ngữ cảnh về cách các thay đổi được tích hợp
  • Bạn muốn có một bản ghi rõ ràng về việc các branch đã được gộp lại với nhau
  • Bạn đang làm việc trên một branch sống lâu và muốn tránh việc giải quyết nhiều xung đột

Nên dùng Rebase khi:

  • Bạn đang làm việc trên một branch cá nhân chưa được push
  • Bạn muốn giữ lịch sử commit sạch sẽ và tuyến tính
  • Bạn muốn dễ dàng hiểu được chuỗi các thay đổi theo thời gian
  • Bạn muốn giải quyết xung đột một cách tăng dần thay vì tất cả cùng một lúc

Tổng kết

Cả merge và rebase đều là những công cụ mạnh mẽ để tích hợp thay đổi giữa các branch, mỗi cái có ưu và nhược điểm riêng:

  • Merge giữ nguyên lịch sử và an toàn cho các branch được chia sẻ, nhưng có thể làm lộn xộn lịch sử dự án
  • Rebase tạo ra lịch sử sạch sẽ và tuyến tính, nhưng viết lại lịch sử và không phù hợp cho các branch được chia sẻ

Quy trình tốt nhất là kết hợp cả hai: sử dụng rebase để giữ topic branch của bạn cập nhật trong quá trình phát triển, sau đó sử dụng merge để tích hợp các thay đổi trở lại vào source branch. Cách tiếp cận này cho phép bạn tận dụng ưu điểm của cả hai phương pháp.

Hy vọng bạn đã hiểu rõ sự khác biệt và cách sử dụng merge và rebase một cách hiệu quả. Hãy thử sức với bài quiz cho chương này nhé!

Tiếp theo: Quiz