2012-03-19 19 views
6

Ví dụ:Tại sao không git hợp nhất thay đổi khi hai nhánh khác nhau nhưng không có cam kết mới trong một trong hai nhánh?

Tôi nhánh chính của tôi có nội dung trong đó. Một chi nhánh khác gọi là other_branch có nội dung + chi tiết hơn trong đó. Mỗi chi nhánh không có gì để cam kết.

Nếu tôi thanh toán chính thì hãy thử hợp nhất other_branch, git nói "Đã cập nhật". và không có gì vui vẻ. tại sao more_stuff sẽ không được hợp nhất thành master trong trường hợp này? Đó có phải là cách git được thiết kế không?

LƯU Ý: other_branch được tạo từ cam kết cũ hơn của trang cái.

Trả lời

6

Rất đơn giản. Nếu git nói "Đã cập nhật" thì điều đó có nghĩa là các nhánh không bị phân tách. Hai chi nhánh đã phân kỳ nếu ít nhất một trong các nhánh chứa một cam kết mà nhánh kia không có.

Tôi không chắc chắn ý của bạn là có công cụ + more_stuff trong đó. Nếu bạn đã thêm tệp mới vào other_branch (hoặc đã thay đổi các tệp hiện có) và sử dụng "git add" và "git commit" other_branch history sẽ được phân tách khỏi nhánh chính. Vì git nói rằng không có thay đổi nào để hợp nhất, lịch sử không thay đổi trên nhánh đó, tức là bạn chưa cam kết gì cả.

+2

Ồ, tôi hiểu rồi. Nó không phải là rất rõ ràng cho một người mới bắt đầu. other_branch chứa các commit giống như master vì tôi khởi tạo nó từ một commit cũ hơn của master. Tôi đã bối rối bởi vì khi tôi kiểm tra other_branch, tôi thấy các tập tin khác nhau, vì vậy tôi nghĩ git merge sẽ hợp nhất các tập tin vào master. Tôi hiểu nó hoạt động như thế nào. git merge được dựa trên các cam kết, không phải là cây công việc hiện tại. – trusktr

2

Điều này chỉ xảy ra khi nhánh bạn đang cố hợp nhất đã được chứa trong nhánh hiện tại.

Vì vậy, more_stuff bạn đã đề cập đã có trong nhánh chính.

Bạn có thể sử dụng gitk để kiểm tra cây trực quan của các chi nhánh của bạn.

+0

gitk? không chắc chắn đó là gì –

+0

Đó là giao diện git mặc định. [Xem thêm thông tin tại đây.] (Https://git-scm.com/docs/gitk) –

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