chi nhánh git của tôi trông như thế này:Làm thế nào để rebase qua đã rebased chi nhánh
master-*-*-*-*-*-*-implement_x
\ \-*-further_foo_fixes_that_depend_on_x
\ \-*-*-further_bar_fixes_that_depend_on_x
\
\-implement_x_rebased
Nó đã kết thúc theo cách này, bởi vì tôi nghĩ rằng chi nhánh của tôi implement_x
sẽ được sáp nhập ngược dòng như nó có, nhưng tôi đã được yêu cầu vắt ép mình với một cam kết đơn lẻ, như vậy implement_x_rebased
. Tuy nhiên, tôi đã bắt đầu một số chi nhánh để tiếp tục sửa chữa và phát triển phụ thuộc vào công việc của tôi, trong khi chờ đợi cho các implement_x
để có được sáp nhập.
Bây giờ tôi muốn rebase công việc tiếp theo trên implement_x_rebased
. Tôi nghĩ rằng đây là một không-op, vì implement_x
và implement_x_rebased
ở trạng thái giống hệt nhau - sẽ không có xung đột hợp nhất, chỉ áp dụng các thay đổi giữa implement_x
và further_foo_fixes_that_depend_on_x
v.v. trên đầu trang implement_x_rebased
. Tuy nhiên, có vẻ như git không phải là thông minh, và nó cố gắng để rebase tất cả các cách từ cơ sở - giới thiệu xung đột hợp nhất không cần thiết.
Tôi nghĩ rằng cách dễ dàng ra là rebase & dẹp sửa thêm về implement_x
và sau đó cất giấu chúng, và áp dụng các ẩn nấp để implement_x_rebased
, nhưng tôi tò mò liệu có cách nào thích hợp để làm git nhận ra rằng implement_x
và implement_x_rebased
thực sự có cùng trạng thái không?
Tôi không biết câu trả lời hoàn hảo cho câu hỏi này nhưng lựa chọn anh đào cũng là một trong các tùy chọn. – shirakia
Ah. Cherry-chọn chắc chắn là dễ dàng hơn và tốt hơn so với bằng tay áp dụng một số khác biệt. Tôi vẫn đang chờ câu trả lời trực tiếp trả lời câu hỏi của tôi, nhưng nếu không có bất kỳ thời gian nào trong tôi, tôi sẽ chấp nhận rằng nếu bạn đăng câu hỏi đó. – GolDDranks
Vui lòng kiểm tra 'git rev-parse implementation_x^{tree} implementation_x_rebased^{tree}' để xem liệu hai commit thực sự có nội dung giống nhau hay không. – jthill