Menu
CoddyTech

Git Rebase

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

git rebase di chuyển các commit trên nhánh 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 thay vì một merge commit. Rebase tương tác (-i) còn đi xa hơn, cho phép bạn squash, sắp xếp lại, sửa hoặc bỏ commit. Vì rebase viết lại commit, chỉ dùng nó với phần việc bạn chưa chia sẻ.

Bạn có thể thử các lệnh này trong terminal playground: một shell thật ngay trên trình duyệt, không cần cài đặt gì.

git rebase phát lại các commit của nhánh bạn lên trên main dưới dạng bản sao mới, cho ra lịch sử thẳng một đường.

Cú pháp

LệnhTác dụng
git rebase mainPhát lại các commit của bạn lên trên main
git rebase -i HEAD~3Chỉnh sửa tương tác 3 commit gần nhất
git rebase --onto main old newChuyển một dải commit lên main
git rebase --continueTiếp tục sau khi giải quyết xung đột
git rebase --abortHủy rebase, khôi phục nhánh như cũ
git pull --rebasePull rồi rebase thay vì merge

Từ khóa trong rebase tương tác

Trong trình soạn thảo mà -i mở ra, đổi pick thành một trong các từ khóa sau.

Từ khóaTác dụng
pickGiữ commit
rewordGiữ commit, sửa thông điệp
squashGộp vào commit trước đó, nối các thông điệp
fixupGộp vào, bỏ thông điệp của commit này
dropXóa hẳn commit

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

git rebase làm gì?

Lệnh này lấy các commit trên nhánh hiện tại và phát lại lần lượt từng commit lên trên một nhánh khác, như thể bạn bắt đầu làm việc từ commit mới nhất của nhánh đó. Kết quả là một lịch sử thẳng hàng, không có merge commit. Trong quá trình này, các commit được viết lại (chúng nhận hash mới).

Rebase tương tác là gì?
git rebase -i <base> mở một trình soạn thảo liệt kê các commit kể từ <base>, nơi bạn có thể sắp xếp lại, squash nhiều commit thành một, reword thông điệp, edit một commit hoặc drop nó. Đây là công cụ chính để dọn dẹp một chuỗi commit lộn xộn trước khi chia sẻ.
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ứ đã 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 commit đã công khai, hãy dùng merge hoặc revert.
Làm sao xử lý hoặc hủy một lần rebase bị xung đột?
Khi rebase dừng lại vì xung đột, hãy sửa các tệp, git add chúng, rồi chạy git rebase --continue. Dùng git rebase --skip để bỏ commit hiện tại, hoặc git rebase --abort để hủy hẳn và đưa nhánh về đúng trạng thái trước khi bắt đầu rebase.
Có thể luyện tập lệnh này online không?
Có. Mở terminal playground để chạy 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 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