2010-02-15 37 views
23

Tôi đang gặp vấn đề. Chúng tôi có CMS của riêng mình đang sử dụng git để cộng tác và phiên bản và nội dung.git merge đệ quy của họ, nó hoạt động như thế nào?

Bây giờ tôi có hai kho git A và B, A là một dự án và B là bản thân CMS. Bây giờ tôi muốn nhận được B vào A, nhưng khi tôi làm điều này tôi nhận được rất nhiều merge-xung đột và giải pháp cho cuộc xung đột luôn là sử dụng các công cụ từ B.

Bây giờ những gì tôi nghĩ rằng tôi cần là

git merge <branch> -s recursive theirs <commit> 

vì tôi muốn hợp nhất và khi có xung đột hợp nhất, nên bắt buộc phải sử dụng giải pháp từ B. Nhưng tôi không thể làm cho nó hoạt động. Nó luôn luôn nói với tôi fatal: 'theirs' does not point to a commit.

recursive theirs Tôi đã tìm thấy here.

Có ai biết tôi làm gì sai không?

+0

có thể trùng lặp của [Làm thế nào để chọn một (?) hợp nhất chiến lược cho một git rebase?] (http://stackoverflow.com/questions/2945344/how-do-i-select-a-merge-strategy-for-a-git-rebase) – Louis

Trả lời

48

Bạn phải sử dụng mẫu đơn này để vượt qua các lựa chọn chiến lược hợp nhất:

git merge -s recursive -Xtheirs 

Ngoài ra hãy chắc chắn rằng bạn suppors phiên bản -Xtheirs, đó là một tính năng khá gần đây

+0

nó thực sự là sai git Phiên bản, bây giờ với cái mới nó hoạt động .. chỉ có nó không hoạt động tốt như tôi nghĩ, tôi nhận được tất cả các cuộc xung đột hợp nhất nhưng không ai trong số họ có bất kỳ xung đột: s –

+0

Câu trả lời này dường như bỏ lỡ sự bao gồm của chi nhánh trong hợp nhất? 'git merge -s đệ quy -Xtheirs ' – robstarbuck

2

Tôi nghĩ lý do không thành công là bạn đang chỉ định "đệ quy của họ" làm chiến lược. "đệ quy" là một chiến lược, và khi bạn đặt một không gian sau nó, "của họ" được hiểu là một cái gì đó git cần hợp nhất bản sao làm việc của bạn với (ví dụ: một nhánh khác hoặc refspec).

Tôi nghĩ bạn sẽ không thể chỉ định chiến lược chính xác như những gì bạn muốn. Có một chiến lược được gọi là "của chúng ta", điều ngược lại với những gì bạn muốn.

Mẫu thông thường được sử dụng trong trường hợp này là hợp nhất hoặc rebase vào kho lưu trữ "B". Từ bên trong bản sao làm việc của kho lưu trữ "A", bạn sẽ thực hiện việc rebase, nếu có thể (có thể không, nếu bạn đã chia sẻ git repo với các nhà phát triển khác). Một rebase về cơ bản sẽ cuộn kho A trở lại một cam kết chung trong cả hai kho, áp dụng các cam kết "B", sau đó "A" cam kết trên đầu trang. Bạn sẽ giải quyết bất kỳ xung đột hợp nhất nào trên đường đi.

Một khi bạn đi qua những đau đớn của việc sáp nhập hoặc rebasing vào "B" kho lưu trữ, việc sáp nhập trong tương lai sẽ ít đau đớn.

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