Git rebase “gộp commit từ nhánh này vào nhánh khác”

Git rebase được sử dụng khi nào?

Lệnh git rebase được dùng để gộp các commit từ nhánh này vào nhánh khác, bằng cách xây dựng lại các commit base kế thừa từ nhánh khác và viết lại lịch sử commit sau các commit cơ sở mới.

Cấu trúc câu lệnh “git rebase”

$ git rebase <branch-name>

hoặc

$ git rebase <branch-name> <rebase-branch-name>

Ví dụ tình huống sử dụng “git rebase”

Giả sử ta có nhánh beta, ta muốn gộp nhánh beta vào master.

Đầu tiên, cần phải xác định là mình đang đứng ở nhánh master và thực hiện lệnh

$ git rebase beta

hoặc

$ git rebase beta master

Như trên hình trên, trước thời điểm rebase, nhánh master có các commit cơ sở giống với nhánh beta đó là: C1, C2, C3

Lệnh git rebase sẽ đưa toàn bộ nhánh beta làm base của master, do vậy các commit tiếp theo sau commit cơ sở ban đầu của master sẽ được nối tiếp vào, trong đó có thay đổi lại lịch sử commit, cũng sử lý xung đột giữa commit B2 và D1 để viết lại commit D1 thành D1′

Tương tự, nếu gộp master vào beta thì sơ đồ có thể là:

Có thể giải thích nguyên lý hoạt động trường hợp rebase trên theo cách khác như sau:

  • Lưu các commit B1, B2 (các commit của beta tính tới cha chung gần nhất)
  • Reset beta về commit C3.
  • Áp dụng các commit của master đến cha chung gần nhất C3.
  • Tạo các commit mới B1′, B2 với B1′ tạo ra từ xử lý xung đột giữa commit B1 và D2.

Đặc điểm “git rebase”

  • Các commit của rebase-branch sẽ là các commit mới nhất.
  • Lịch sử commit sẽ bị thay đổi.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *