Mở bài
Khi làm việc với Git, sẽ có lúc chúng ta cần kết hợp các commit từ branch này và một branch khác (nội dung bên dưới sẽ có ví dụ minh họa cụ thể)
Điều này có thể được thực hiện bằng cách sử dụng lệnh git merge
hoặc git rebase
.
Trong bài viết này, chúng ta sẽ tập trung vào git rebase
, cách hoạt động của nó như thế nào mà lại có thể giúp chúng ta đơn giản hóa lịch sử commit của git.
git rebase
là gì?
Rebase có thể được hiểu là "di chuyển phần base của một branch sang một vị trí khác"
Giả sử, dự án của bạn vừa release một bản production.
Trong lúc tiếp tục code tính năng mới trên branch có tên là new_feature
, thì phát hiện có bug trong bản release (main
branch).
Để khắc phục, bạn tạo một branch khác có tên quick_fix
, sau đó thực hiện fix bug và merge vào main
branch.
Tuy nhiên lúc này main
và new_feature
đã phân tách và có lịch sử commit khác nhau như hình dưới đây:
Nếu muốn cập nhật các thay đổi từ main
vào new_feature
, nhiều bạn sẽ lựa chọn sử dụng git merge
.
Nhưng ngoài ra, còn một giải pháp khác đó là sử dụng git rebase
. Với git rebase
, chúng ta có thể giữ lịch sử commit rõ ràng và dễ theo dõi.
Bằng cách rebasing new_feature
vào main
, bạn đã chuyển tất cả các commit được thực hiện từ new_feature
về phía sau của main branch như hình dưới đây:
Lợi ích của git rebase
so với khi dùng git merge
Có thể thấy, base mới của branch new_feature
đã được cập nhật thành main
branch mới nhất, mà trong đó bao gồm cả những thay đổi từ việc fix bug (quick_fix
branch)
Một trong những lợi ích chính của việc sử dụng git rebase
đó là nó sẽ không sinh ra các merge commit không cần thiết như khi chúng ta sử dụng git merge
.
Quan trọng nhất, lịch sử commit ở main
branch vẫn tuyến tính, giúp chúng ta kiểm tra lại các thay đổi dễ dàng hơn trong log hoặc graph.
Lưu ý khi sử dụng git rebase
git rebase
có thể rất hữu ích, nhưng nó cũng đi kèm một số rủi ro mà chúng ta cần phải lưu ý.
Lưu ý số 1: Chỉ dùng trên local repository.
Một khi commit đã được push lên remote repository, thì đừng rebase nó.
Vì git rebase
sẽ thay đổi lịch sử commit, nên chúng ta cũng sẽ phải giải quyết nhiều conflict hơn. Bạn có thể sẽ phải xử lý lại những conflict đã được giải quyết ở những lần merge trước đó.
Để giảm số lượng merge conflict, bạn cần nhớ thực hiện rebase thường xuyên.
Lưu ý số 2: Không rebase trên branch dùng chung (ví dụ branch develop
, main
)
Vì git rebase
sẽ thay đổi lịch sử commit, nên nếu người khác bắt đầu pull
code từ nhánh dùng chung về và thêm những commit khác, lịch sử commit sẽ không thể đồng bộ được nữa.
Vì vậy luôn nhớ QUY TẮC VÀNG, chỉ sử dụng git rebase
trên một local branch mà bạn đang thực hiện riêng lẻ một mình.
Kết bài
git rebase
là công cụ rất hữu ích khi dự án làm việc với nhiều người và nhiều branch, nếu được sử dụng đúng cách, nó sẽ giúp anh em có thể có được một lịch sử commit rất rõ ràng.
Tuy nhiên, điều quan trọng là phải hiểu cách thức hoạt động và những rủi ro đi kèm của nó.
Follow mình để cập nhật những thông tin thú vị về Lập trình nhé:
Facebook: Tờ Mờ Sáng học Lập trình
Youtube: Tờ Mờ Sáng học Lập trình
TikTok: Tờ Mờ Sáng học Lập trình
TikTok: CLB Lập trình - THPT Ngọc Tảo
Tài liệu tham khảo
Khóa học "Learn Git & GitHub" trên codecademy: https://www.codecademy.com/enrolled/courses/learn-git