Git rebase là gì và khi nào thì sử dụng git rebase

Git rebase là gì?

Rebasing là quá trình di chuyển hoặc gộp một chuỗi các commit thành một commit mới. Rebasing hữu ích nhất và dễ dàng hình dung trong ngữ cảnh của quy trình làm việc với các nhánh.

Cách sử dụng

Lý do chính cho việc rebasing là để duy trì lịch sử dự án tuyến tính. Ví dụ: một tình huống mà nhánh chính đã tiến triển kể từ khi bạn bắt đầu làm việc trên một nhánh tính năng. Bạn muốn nhận các bản cập nhật mới nhất code từ nhánh chính vào nhánh tính năng của bạn, nhưng bạn muốn giữ lịch sử nhánh của mình sạch sẽ để nó xuất hiện như thể bạn đang làm việc với nhánh chính mới nhất.

Điều này mang lại lợi ích rõ ràng khi merge nhánh tính năng của bạn trở lại nhánh chính. Tại sao chúng ta muốn duy trì một “lịch sử sạch sẽ”? Lợi ích của việc có một lịch sử rõ ràng trở nên hữu hình khi thực hiện các phép toán Git để điều tra. Một kịch bản trong thế giới thực hơn sẽ là:

  • Một lỗi được xác định trong nhánh chính. Một tính năng đang hoạt động hiện đã bị hỏng.
  • Một developer kiểm tra lịch sử của nhánh chính bằng git log vì “lịch sử sạch”, developer có thể nhanh chóng suy luận về lịch sử của dự án.
  • Developer không thể xác định thời điểm xuất hiện lỗi bằng cách sử dụng git log, vì vậy developer thực thi một git bisect sử dụng tìm kiếm nhị phân để tìm commit đã tạo ra lỗi.
  • Bởi vì lịch sử git là sạch, git bisect có một tập hợp các commit được tinh chỉnh để so sánh khi tìm kiếm hồi quy. Developer nhanh chóng tìm thấy commit đã gây ra lỗi và có thể hành động theo đó.

Lệnh sử dụng

git rebase origin/master

Bạn có thể thay origin/master thành tên nhánh của bạn
git rebase

git pull rebase

git pull --rebase

Bạn nên sử dụng git pull –rebase khi cộng tác với những người khác trên cùng một nhánh. your work → commit → work → commit , và khi bạn quyết định push công việc của mình thì việc push của bạn bị từ chối, bởi vì có nhiều công việc song song trên cùng một nhánh. Tại thời điểm này, luôn thực hiện pull --rebase. Rebase lại để tránh các commit merge bổ sung.