2009-01-08 14 views
18

Tôi có kho lưu trữ git cục bộ được tạo với git svn clone. Tôi tạo ra một chi nhánh địa phương, thực hiện một số thay đổi, chuyển về master, git svn rebase và nếu tất cả đều tốt, tôi hợp nhất nhánh của mình thành master. Sau đó, cây trông giống như sau:Tại sao git svn dcommit mất lịch sử kết hợp các cam kết cho các chi nhánh địa phương?

alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

Đôi khi, sau khi tôi git svn rebase một lần nữa và nhận được một số thay đổi từ xa, nó sẽ mất một thực tế rằng a_branch được sáp nhập vào Mainline và cây trông như thế này:

alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

Tại sao lại như vậy? Tôi có thể dừng nó không? Có một cách dễ dàng để nói rằng một chi nhánh đã được sáp nhập, hoặc tôi nên xóa các chi nhánh của tôi khi tôi đang thực hiện vì vậy tôi không quên những gì đã và chưa được sáp nhập?

Trả lời

22

Trang người dùng git-svn khuyên bạn không nên sử dụng hợp nhất. Đây là một tác dụng phụ. Kể từ khi bạn đang rebasing chi nhánh (git svn rebase là một chút như "git pull --rebase") nó có hiệu quả viết lại lịch sử. Nó có thể vứt bỏ bất kỳ cam kết cục bộ nào đã được upstream trong subversion, chẳng hạn như hợp nhất, và chỉ giữ những cam kết thực sự tồn tại trong kho svn. Kể từ khi một cam kết tầm thường của một chi nhánh địa phương không có tương đương trong SVN, bạn chỉ cam kết những thay đổi "thực", vì vậy đây là những thay đổi duy nhất được nhìn thấy trong nhánh master mới được rebased của bạn.

Lý tưởng nhất là chi nhánh địa phương của bạn chỉ nên hợp nhất nhanh về phía trước, tức là không có cam kết hợp nhất nào được tạo. Nếu đây không phải là trường hợp, thì bạn nên xem xét việc rebasing chi nhánh địa phương của bạn vào master thay vì sáp nhập nó. Điều đó tránh tạo ra một cam kết hợp nhất hoàn toàn.

+1

+1 cho git rebase master – JoaoHornburg

0

Vì bạn đang trải qua svn. Bạn sẽ mất rất nhiều thông tin khi bạn làm điều đó (bạn cũng mất tác giả chẳng hạn).