2011-10-04 42 views
15

git phiên bản 1.7.5.4hợp nhất với các chi nhánh, không quan trọng bạn hợp nhất vào chi nhánh nào?

Tôi có khoảng 5 chi nhánh. Tất cả từ cùng một nhánh ban đầu.

Tôi muốn hợp nhất 2 chi nhánh lại với nhau. nói, branch1 và branch2. Những nhánh này có rất nhiều sự khác biệt.

Tôi hiện đang làm việc trên branch1 và vừa nhận ra có một số thay đổi mà tôi đã thực hiện trong branch2 mà tôi muốn trong branch1.

cách tốt nhất để hợp nhất là gì?

checkout branch2 and merge branch1 

hoặc

checkout branch1 and merge branch2 

Hoặc không nó có vấn đề mà ngành bạn cần phải kiểm sáp nhập với chi nhánh khác?

Trả lời

16

Thông thường, không quan trọng nếu cả hai nhánh là chủ đề hoặc chi nhánh tính năng. Tuy nhiên, nếu bạn có chi nhánh tích hợp hoặc chi nhánh đánh dấu những gì đã được xuất bản, bạn chắc chắn muốn sử dụng nhánh tích hợp lâu dài như một nhánh được kiểm tra và hợp nhất một nhánh khác vào đó.

Lý do cho điều này là cam kết hợp nhất sẽ đánh dấu phụ huynh đầu tiên cam kết là người đến từ nhánh chính. Thông số kỹ thuật cây-ish của bạn cho lịch sử cho nhánh đó thật dễ dàng.Để tìm cam kết rằng là người cuối cùng thứ 4 trong ngành này, bạn chỉ cần

git show head~4 

Nếu bạn sáp nhập từ các chi nhánh khác ở đâu đó ở giữa, bạn sẽ phải dứt khoát chuyển sang cam kết thứ hai bất cứ nơi nào hợp nhất đã được thực hiện khác cách:

git show head^^2^^ 

Điều này có thể gây ra sự cố với các nhánh chính vì một lý do khác; hợp nhất chúng thành các chủ đề hoặc các tính năng chi nhánh được gọi là "trở lại sáp nhập" và không phải là một ý tưởng tốt. Tôi nhớ lại Linus Torvalds đã thổi đỉnh của mình khi những người đóng góp đã làm điều đó. Nó sẽ không cho phép anh ta tách biệt rõ ràng những tính năng anh ta muốn hợp nhất cho một phiên bản chính vì các nhánh tính năng sẽ mang lại một phép thử nghiệm cũ bao gồm những thứ anh ta không muốn nữa.

Vì vậy, cuối cùng, nếu một chi nhánh quan trọng hơn và không chỉ là một đối tượng địa lý, hãy kiểm tra và hợp nhất từ ​​đó. Bạn sẽ có thể giữ cho lịch sử của nó được xem dễ dàng như bạn biết rằng đó là lần đầu tiên cha mẹ luôn luôn là nơi mà chi nhánh trước đây. Nếu không, bạn sẽ phải dựa vào việc đọc các thông điệp cam kết hợp nhất và nó không phải là thú vị. :)

Tôi đã viết một bài viết về BPF trong đó cho thấy một phương pháp nghiêm ngặt của chi nhánh tổ chức giữ: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

+1

1 điểm tốt đẹp về việc giữ gìn con đường cha mẹ đầu tiên hữu ích –

+0

Cheers! Những sai lầm làm cho lịch sử chuyển hướng một cơn ác mộng. –

3

Tôi giả định rằng bạn thực sự muốn hợp nhất toàn bộ chi nhánh, thay vì chỉ chọn hoa anh đào các cam kết lẻ. Ngoài ra, những gì tôi đang nói dưới đây là rất nhiều dựa trên điều này very helpful blog post by Junio C. Hamano, git duy trì, mà tôi mạnh mẽ khuyên bạn nên đọc nếu bạn muốn biết thêm về triết lý phân nhánh.

Thật không may, không có đủ thông tin trong câu hỏi của bạn để đưa ra lời khuyên về điều này, bởi vì câu hỏi phụ thuộc rất nhiều vào mục đích của mỗi chi nhánh. Trong một trường hợp phổ biến, ví dụ, một trong những có thể có một chi nhánh master mà một trong những nên luôn luôn có thể tạo ra một bản phát hành ổn định từ. Khi ai đó muốn thêm một tính năng mới vào phần mềm, họ có thể tạo một nhánh chủ đề từ chủ được gọi là awesome-feature mà họ làm việc, có thể rebase, kiểm tra kỹ lưỡng, v.v. Khi mọi người hài lòng với nhánh đó, thì chỉ cần hợp nhất awesome-feature vào master chứ không phải theo cách khác. (Vòng khác có nghĩa là, xấp xỉ, mọi thứ trong tổng thể sẽ giúp thực hiện "tính năng tuyệt vời" mà nhánh chủ đề dành cho.) Bạn chỉ có thể biết vòng nào là đúng, vì chúng ta biết mục đích của mỗi nhánh .

Phân nhánh và hợp nhất rất dễ dàng trong git, nó hỗ trợ nhiều luồng công việc khác nhau, từ highly structured, đến rather simpler, hoàn toàn không có cấu trúc. Bởi "hoàn toàn không có cấu trúc", tôi có nghĩa là có nhiều nhánh phát triển khác nhau, và mọi người hợp nhất giữa chúng theo bất kỳ cách nào dường như bao gồm các tính năng họ muốn trong một nhánh cụ thể - nếu bạn ở trong tình huống như vậy, mục đích xác định cho từng chi nhánh, nó có thể không quan trọng cho dù bạn hợp nhất branch1 thành branch2 hoặc cách khác. Tuy nhiên, tôi thấy hữu ích hơn khi có một mục đích rõ ràng hơn cho mỗi nhánh, trong trường hợp này, cách bạn kết hợp hai nhánh là không quan trọng.

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