2011-11-24 36 views
5

Tôi có một cây git trông giống như sau:Git rebase cam kết lựa chọn

enter image description here

Bởi vì công cụ rà soát chúng tôi sử dụng, chúng tôi cherry chọn thay đổi trong hơn là sáp nhập chúng. Điều này để lại cho chúng ta một số bản sao hợp lý, có nhánh mà tôi vừa xóa. Ví dụ, thay đổi một bên dưới ssl_tests "Sửa đổi: Thay đổi tên ..." cũng có thể được nhìn thấy trong dev.

Bây giờ, có lẽ đây là một sự thiếu hiểu biết về phần tôi chọn, nhưng những cam kết có băm khác nhau và do đó là cam kết khác nhau phải không? Mặc dù chúng hợp lý giống nhau.

Tuy nhiên, khi tôi đi để rebase ssl_tests lên dev, git quản lý để tìm ra rằng những người anh đào chọn cam kết là thượng nguồn và sau đó chỉ rebases "New Feature: Unit tests ..." cam kết từ ssl_tests.

Như thường lệ, với git, điều này thật tuyệt! Đây chính là điều tôi muốn! Câu hỏi của tôi mặc dù, là làm thế nào để git tìm ra rằng nó không cần phải rebase các cam kết khác nếu họ có băm khác nhau?

Cảm ơn! Stephen

+0

Bài đăng tốt về việc kết hợp ma thuật trong Git là [Làm thế nào và/hoặc tại sao hợp nhất Git tốt hơn trong SVN?] (Http://stackoverflow.com/q/2471606/11343) – CharlesB

Trả lời

5

Git đang xem xét nhiều hơn chỉ là SHA1 tại đây. Nó thực sự xem xét các nội dung của cam kết. Nó thấy rằng các cây kết quả từ việc áp dụng cam kết và không áp dụng cam kết là như nhau; nghĩa là, cam kết sẽ trống nếu được áp dụng cho cơ sở mới. Vì vậy, rebase là đủ thông minh để biết rằng nó không cần phải bận tâm bao gồm cả những cam kết.

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