2011-12-14 34 views
7

Tôi đang cố gắng tìm ra lý do tại sao việc rebase yêu cầu hợp nhất ba chiều. Ví dụ, nếu chúng ta cóTại sao git rebase yêu cầu hợp nhất 3 chiều?

A1 - A2 
\ 
    B1 

Và tôi đã kiểm tra ra B1, và tôi muốn thực hiện:

git rebase A2 

tại sao git merge A2, B1 VÀ A1? Tại sao không A2 và B1 đủ? Tôi có nghĩa là, không A2 và B1 là cam kết chứa ảnh chụp toàn cảnh hiện tại của cây?

+1

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

Trả lời

7

Để 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 A1B1 đế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 A1A2. 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 đó.

+0

cảm ơn bạn, điều đó có ý nghĩa rất tốt. – worker1138

Các vấn đề liên quan