Rebase Nâng Cao

Một phần của tài liệu Pro GIT ting vit (Trang 73 - 76)

Bạn cũng có thể thực hiện rebase trên một đối tượng khác mà khơng phải là nhánh rebase. Xem ví dụ Hình 3-31. Bạn tạo một nhánh chủ để (server) để thêm một số tính năng server-side vào dự án, và thực hiện một số commit. Sau đó bạn tạo một nhánh khác để thực hiện một số thay đổi cho phía client (client) và cũng commit vài lần. Cuối cùng, bạn quay trở lại nhánh server và thực hiện thêm một số commit nữa.

Hình 3-31. Nhánh chủ đề được tạo từ một nhánh chủ đề khác.

Giả sử bạn quyết định tích hợp các thay đổi phía client vào nhánh chính cho bản phát hành sắp tới, nhưng bạn vẫn muốn giữ các thay đổi server-side cho đến khi nó được kiểm tra kỹ lưỡng. Bạn có thể lấy các thay đổi ở client mà khơng có mặt ở server (C8 và C9) sau đó chạy lại (replay) chúng trên nhánh master bằng cách sử dụng lựa chọn --onto cho lệnh git rebase: $ git rebase --onto master server client

Lệnh này cơ bản nói rằng, "Hãy check out nhánh client, tìm ra các bản vá từ commit chung của nhánh client và server, sau đó thực thi lại vào nhánh master." Nó hơi phức tạp một chút nhưng kết quả như Hình 3-32 thì lại rất tuyệt.

Hình 3-32. Quá trình rebase nhánh chủ đề khỏi một nhánh chủ đề khác.

Bây giờ bạn có thể di chuyển con trỏ của nhánh master tiến lên phía trước (xem Hình 3-33): $ git checkout master

Hình 3-33. Di chuyển nhánh master lên phía trước để bao gồm các thay đổi của nhánh client.

Giả sử rằng bạn quyết định kéo về cả nhánh trên máy chủ. Bạn có thể rebase nhánh trên máy chủ đó vào nhánh master mà khơng phải checkout trước bằng lệnh git rebase [basebranch] [topicbranch] - lệnh này sẽ checkout nhánh chủ để (trong trường hợp này là server) cho bạn và áp dụng lại các thay đổi vào nhánh cơ sở (base) master:

$ git rebase master server

Lệnh này sẽ thực hiện lại các thay đổi trên nhánh server chèn vào nhánh master như trong Hình 3-34.

Hình 3-34. Rebase nhánh server chèn lên nhánh master.

Sau đó bạn có thể di chuyển con trỏ nhánh base (master): $ git checkout master

$ git merge server

Bạn có thể xóa nhánh client và server vì tất cả cơng việc đã được tích hợp vào master và bạn khơng cần đến chúng nữa, lịch sử quả toàn bộ quá trình vừa rồi giống như Hình 3-35:

$ git branch -d server

Hình 3-35. Lịch sử commit cuối cùng.

Một phần của tài liệu Pro GIT ting vit (Trang 73 - 76)

Tải bản đầy đủ (DOCX)

(81 trang)
w