Menu
CoddyTech

Git rebase và merge

Cập nhật lần cuối

Cả git merge và git rebase đều gộp phần việc từ nhánh này sang nhánh khác. git merge nối hai lịch sử lại bằng một merge commit, giữ đúng những gì đã xảy ra. git rebase phát lại từng commit của bạn lên trên nhánh kia, cho ra lịch sử gọn gàng, thẳng hàng, nhưng đồng thời viết lại các commit đó.

Quy tắc vàng: đừng bao giờ rebase những commit người khác đã pull về. Bạn có thể thử cả hai trong terminal playground: một shell thật ngay trên trình duyệt.

merge ghi lại một commit nối và giữ đúng hình dạng thật của lịch sử; rebase viết lại các commit của bạn thành một đường thẳng.

So sánh song song

Đặc điểmgit mergegit rebase
Hình dạng lịch sửRẽ nhánh, có merge commitThẳng hàng
Viết lại commitKhôngCó
An toàn trên nhánh dùng chungCóKhông
Giữ nguyên lịch sửCóKhông
Dễ lần ra thời điểm gộp nhánhCóKhó hơn

Cú pháp

LệnhTác dụng
git merge featureMerge feature vào nhánh hiện tại
git merge --no-ff featureLuôn tạo một merge commit
git rebase mainPhát lại các commit của nhánh hiện tại lên main
git rebase -i HEAD~3Chỉnh sửa tương tác 3 commit gần nhất
git rebase --abortHủy một lần rebase đang dở

Câu hỏi thường gặp về git rebase và merge

git rebase và git merge khác nhau thế nào?
git merge gộp hai nhánh bằng cách tạo một merge commit mới nối hai lịch sử, giữ lại chính xác những gì đã xảy ra. git rebase thì di chuyển các commit của bạn để phát lại chúng lên trên một nhánh khác, cho ra lịch sử thẳng hàng nhưng viết lại các commit đó với hash mới. Merge giữ nguyên lịch sử; rebase viết lại lịch sử cho gọn.
Khi nào nên dùng merge, khi nào nên dùng rebase?
Dùng merge để tích hợp một nhánh đã xong (nhất là nhánh dùng chung): cách này an toàn và không phá hủy gì. Dùng rebase để dọn dẹp các commit cục bộ của chính bạn trước khi chia sẻ, hoặc để cập nhật nhánh tính năng lên main mới nhất cho lịch sử gọn gàng. Nhiều nhóm rebase ở máy mình, rồi merge vào main.
Quy tắc vàng của rebase là gì?

Đừng bao giờ rebase những commit mà người khác đã dựa vào để làm việc, thường là mọi thứ bạn đã push lên nhánh dùng chung. Vì rebase viết lại commit, làm vậy buộc mọi người phải xử lý một lịch sử đã tách nhánh. Cứ thoải mái rebase các commit cục bộ chưa push; với những gì đã công khai, hãy dùng merge (hoặc revert).

Rebase hay merge ít gây xung đột hơn?

Không cách nào tránh được xung đột, chúng chỉ khiến xung đột xuất hiện theo cách khác nhau. Merge giải quyết mọi xung đột một lần, trong merge commit. Rebase có thể bắt bạn giải quyết xung đột theo từng commit khi mỗi commit được phát lại. Tổng khối lượng công việc gần như nhau; rebase chỉ chia nhỏ nó ra.

Có thể luyện tập lệnh này online không?
Có. Mở terminal playground để chạy git merge và git rebase trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn từng bước cách merge và rebase.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu