Để thực hiện hợp nhất, Git cần tìm hiểu xem chính xác những gì đã xảy ra trong hai nhánh kể từ tổ tiên chung (A1
). Như bạn đã nói chính xác, Git lưu trữ ảnh chụp nhanh của các cam kết/cây để có được bộ thay đổi thực tế, nó phải so sánh A2
với A1
và B1
đến A1
rồi hợp nhất các bộ thay đổi riêng lẻ đó.
Điều tương tự cũng xảy ra trong quá trình rebase. Để áp dụng bộ thay đổi của A2
trên B1
, trước tiên chúng tôi cần tính toán thay đổi được đặt từ sự khác biệt giữa A1
và A2
. Và sau đó chúng tôi có thể áp dụng điều đó cho B1
. Bạn có thể nghĩ về một rebase như một cái gì đó tương tự như một thế hệ tự động của các tập tin vá lỗi. Đầu tiên nó tạo ra tất cả các tệp vá từ nhánh cũ và áp dụng chúng cho HEAD hiện tại. Vì vậy, chúng ta cần tất cả ba cam kết đó để tính toán sự khác biệt, vì chúng ta không thể tìm ra những gì đã xảy ra trong một cam kết chỉ bằng cách nhìn vào cam kết đó.
cảm ơn bạn, đó là những gì tôi đang cố gắng thể hiện bằng câu hỏi của mình. – worker1138