git rebase <source-branch> <topic-branch>
Tham số <topic-branch> đại diện cho branch sẽ bị "dịch chuyển" bởi lệnh rebase. Ví dụ, lệnh git rebase main <topic-branch> sẽ lấy các commit từ branch <topic-branch> và "dịch chuyển" chúng lên trên đầu của branch main.
Mặc định (Defaults): Nếu bạn không chỉ định tên branch muốn rebase (tham số thứ 2), Git sẽ mặc định chọn branch hiện tại bạn đang đứng làm topic-branch. Ví dụ:
Xung đột có thể xảy ra khi Git cố gắng viết lại lịch sử các commit. Nếu phát hiện xung đột, quá trình rebase sẽ tạm dừng và bạn sẽ thấy thông báo lỗi trên màn hình:
CONFLICT (content): Merge conflict: ...
CONFLICT (modify/delete): Merge conflict: ...
error: could not apply
Bài học tiếp theo sẽ hướng dẫn bạn cách giải quyết xung đột khi rebase.
Việc push một branch vừa mới được rebase lên server thường sẽ thất bại:
! [rejected]
error: failed to push some refs
Lỗi này xuất hiện vì việc push các thay đổi đã rebase sẽ ghi đè lên lịch sử (refs) đang tồn tại trên remote repository. Để báo cho Git biết đây là điều bạn chủ ý muốn làm, hãy truyền thêm cờ --force.
git push --force
Hãy cực kỳ cẩn thận với --force, đặc biệt là khi bạn dùng rebase trên một branch dùng chung. Việc Force push có khả năng ghi đè và làm mất sạch các thay đổi của thành viên khác.
Trong bài học này, chúng ta đã tìm hiểu cách sử dụng lệnh rebase để "dịch chuyển" các commit từ một branch sang một branch khác. Chúng ta sẽ tìm hiểu cách giải quyết xung đột khi rebase ở bài học tiếp theo.
Tiếp theo: Giải quyết conflict khi Rebase