Câu trả lời là có cho các lần hợp nhất mặc định. Một cách hợp nhất ba chiều tìm thấy một tổ tiên chung và sau đó áp dụng sự khác biệt từ cả hai bên, một thao tác không phụ thuộc vào thứ tự. Chủ đề hợp nhất đặt hàng và commutativity tạo ra một cuộc thảo luận hấp dẫn trên git list (nếu bạn đang vào loại điều đó, đó là). Lưu ý B into C
và C into B
phải đối xứng, nhưng điều này không nhất thiết phải được nói cho (B into C) into A
so với B into (C into A)
.
Để xây dựng hơn một chút, dựa trên nhận xét của Vince dưới đây và comment seh về câu hỏi, sẽ có hai sự khác biệt đáng chú ý giữa B into C
và C into B
, không phải trong đó ảnh hưởng đến độ phân giải merge tự động tham chiếu trong câu hỏi.
Trước tiên, lịch sử sẽ khác. Cha mẹ của cam kết hợp nhất sẽ thay đổi tùy thuộc vào thứ tự hợp nhất. Đối với những ví dụ này, tôi sẽ sử dụng "first_branch" và "second_branch", vì vậy tôi có thể đặt trước các chữ cái để biểu diễn các cam kết.
git checkout first_branch && git merge second_branch
E <- merge commit
|\
| D <- second_branch's tip
| |
| C <- another commit on second_branch
| |
| B <- and another
|/
A <- first_branch's tip before the merge
Trong trường hợp này, "cha mẹ đầu tiên" của E, E^1
, là mẹo đầu tiên trước khi hợp nhất. second_branch là "cha mẹ thứ hai" của cam kết hợp nhất, aka E^2
. Bây giờ hãy xem xét điều ngược lại:
git checkout second_branch && git merge first_branch
E <- merge commit
|\
| D <- first_branch's tip
| |
| C <- another commit on first_branch
| |
| B <- and another
|/
A <- second_branch's tip before the merge
Cha mẹ bị đảo ngược. E^1
là mẹo của second_branch trước khi hợp nhất. E^2
là mẹo của first_branch.
Thứ hai, thứ tự hiển thị xung đột sẽ đảo ngược.Trong trường hợp đầu tiên, một cuộc xung đột có thể trông như thế này:
<<<<<<< HEAD
This line was added from the first_branch branch.
=======
This line was added from the second_branch branch.
>>>>>>> second_branch
Trong trường hợp thứ hai, cuộc xung đột tương tự sẽ trông như thế này:
<<<<<<< HEAD
This line was added from the second_branch branch.
=======
This line was added from the first_branch branch.
>>>>>>> first_branch
Cả những khác biệt này ảnh hưởng đến độ phân giải merge tự động, nhưng họ xuất hiện khi bạn đảo ngược thứ tự hợp nhất ba chiều.
Trên một lưu ý liên quan, bạn có thể tìm thấy chuỗi ba năm nay từ danh sách gửi thư Git liên quan, liên quan đến cách thức Git ghi lại các kết hợp nhạy cảm với "hướng" của hợp nhất: http: // thread .gmane.org/gmane.comp.version-control.git/127361 – seh