2011-01-26 21 views
7

Tôi có hai "nhánh", cả hai nhánh đều bắt đầu từ cùng một cơ sở mã, nhưng cả hai đều được nhập vào git sau khi chúng phân tách. Lịch sử trước đó bị mất, và thêm cả hai nhánh có những thay đổi sâu rộng được ghi lại trong lịch sử git của họ.Git: Làm cách nào để hợp nhất các nhánh phức tạp với một số lịch sử bị thiếu?

Chiến lược tốt để tiếp cận các tính năng kết hợp và sửa lỗi giữa hai nhánh này theo cách có thể quản lý là gì?

Có công cụ nào hỗ trợ tôi trong việc tách biệt sự khác biệt trong việc nhập khẩu ban đầu thành các cam kết có ý nghĩa không?

+0

Khi bạn nói lịch sử trước đó bị mất, bạn có nghĩa là không có bản sao nguồn hiện có từ trước khi hai kho/"nhánh" này được tạo ra không? – Cascabel

+0

Ngoài ra, phạm vi của việc hợp nhất bạn đang cố gắng làm là gì? Tái kết hợp hai thành một, và đi từ đó với một quy trình làm việc bình thường? Tiếp tục một cách riêng biệt và chọn những thứ anh đào ngay bây giờ? – Cascabel

+0

Jefromi, điều đó đúng - không có bản sao của nguồn trước đó. Cả hai kho lưu trữ sẽ tiếp tục được làm việc trên một cách riêng biệt, nhưng tôi muốn hợp nhất (cherry-pick?) Những thay đổi của một trong số chúng vào khác. – fuzzyTew

Trả lời

1

Có vẻ như bạn muốn giữ lịch sử. Tôi sẽ sử dụng rebase --onto với --preserve-merges để di chuyển các tính năng/lỗi đến chi nhánh bạn muốn tiếp tục sử dụng. Nếu họ ngồi trong một cấu trúc khác nhau vì một lý do nào đó, hãy tạo một nhánh mới sau đó thực hiện filter-branch với hoạt động của cây để làm cho cấu trúc giống nhau. Sau đó, rebase --onto --preserve-merges như bạn sẽ làm trong trường hợp đầu tiên.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn bạn đã trả lời. Tôi là một chút mới để git, vì vậy nó sẽ đưa tôi một thời gian để đọc lên trên các lệnh và các tùy chọn và xem nếu họ có thể làm những gì tôi cần. Mã đã di chuyển xung quanh bên trong các tệp cũng như trong cấu trúc thư mục. – fuzzyTew

+0

may mắn đọc lên trên đó. Hãy nhớ rằng, đó là ảnh chụp dựa! –

+2

thực hiện một số bản sao của repo và thử nghiệm để xem những gì các lệnh làm. Tôi khuyên bạn nên chạy gitk --all & và làm mới nó thường xuyên để xem trực quan những gì đang xảy ra. –

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