2016-07-15 20 views
5

Tôi có lẽ không nhận được một cái gì đó đúng, nhưng bất cứ ai có thể giải thích cho tôi tại sao git rebase kết quả trong xung đột, trong khi git merge (cùng một chi nhánh) không?Git: Tại sao rebase lại dẫn đến xung đột khi hợp nhất thì không?

Cho đến khi tôi biết git rebase đặt các cam kết từ chi nhánh khác trước khi cam kết tôi thực hiện trên chi nhánh hiện tại của tôi, trong khi git merge có cùng cam kết đó và áp dụng chúng vào chi nhánh của tôi làm bản vá, phải không? Là diff sau đó không giống nhau, mặc dù có thể đảo ngược? Không chắc chắn lý do tại sao vá nhánh của tôi với các cam kết khác không phải là một vấn đề, trong khi vá các chi nhánh khác với cam kết của tôi là.

Trả lời

3

Trong khi rebase, bạn áp dụng tất cả các cam kết của một số chi nhánh trên đầu trang của một số khác. Có thể một trong những cam kết đó có xung đột mà bạn đã giải quyết trong cam kết tiếp theo. Do đó, các hoạt động hợp nhất không có xung đột trong khi rebase dẫn đến xung đột trung gian.

Xem thêm git rerere cho phép bạn tự động giải quyết xung đột mà bạn đã giải quyết.

+0

Tôi hiểu những gì bạn đang nói, nhưng tôi vẫn chưa hiểu rõ. Nói nhánh A của tôi đã cam kết a, b và c. Sau đó, tôi tạo chi nhánh B với các cam kết d và e. Cam kết f được thực hiện trên nhánh A. ** Rebase ** (trong khi trên nhánh B) sẽ dẫn đến: a, b, c, f, d, e; ** hợp nhất ** sẽ dẫn đến: a, b, c, d, e, f. Bây giờ làm thế nào trên trái đất có thể cam kết f tạo ra một cuộc xung đột hợp nhất với cam kết c nếu nó được tạo ra trên đầu trang của cam kết c trên chi nhánh A ở nơi đầu tiên? – minitauros

+0

@minitauros (1) Hợp nhất sẽ dẫn đến hai nhánh được nối: một với a, b, c, f và một với a, b, c, d, e, không phải là một lịch sử tuyến tính. (2) Nếu cam kết F, được thực hiện trên nhánh A, không đưa ra xung đột, thì tôi không thể thấy nó có thể đưa ra xung đột khi rebasing (nếu bạn có một ví dụ chi tiết hơn, điều đó sẽ tuyệt vời). (3) Nhưng nếu D xung đột với F và E khắc phục xung đột đó, thì việc rebase sẽ phát lại xung đột trong khi hợp nhất sẽ không xảy ra. – coredump

+1

Ok sau đó, cảm ơn lời giải thích đó! Làm rõ nó lên một chút. Thật không may tôi không có ví dụ hiện tại nữa (như tôi đã cố định nó), nhưng nếu tôi chạy vào nó một lần nữa và nếu cùng một câu hỏi phát sinh, tôi sẽ cập nhật bài đăng này với nhiều thông tin hơn :). Bây giờ tôi nghĩ câu trả lời này là đủ tốt, cảm ơn! – minitauros

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