2010-03-30 29 views
5

Tôi cần phải hợp nhất giữa dev và master thường xuyên.git chiến lược để có một tập hợp các cam kết giới hạn trong một chi nhánh cụ thể

Tôi cũng có một cam kết mà tôi cần phải áp dụng cho dev chỉ, cho mọi thứ để làm việc tại địa phương.

Trước đó tôi chỉ hợp nhất từ ​​dev thành master, vì vậy tôi đã có một production_changes chi nhánh chứa "undo commit" của cam kết đặc biệt dev. và từ vị thầy, tôi đã sáp nhập cái này. Được sử dụng để làm việc tốt.

Bây giờ mỗi khi tôi nhập từ dev để làm chủ và ngược lại, tôi phải cherry-pick và áp dụng cùng cam kết một lần nữa và một lần nữa :(. Đó là xấu xí.

tôi có thể thích nghi với chiến lược gì để tôi liên tục có thể hợp nhất giữa 2 chi nhánh, nhưng giữ lại một số thay đổi chỉ trên một trong những chi nhánh?

Trả lời

1

tôi muốn giới thiệu một merge driver (kịch bản tuyên bố trong một chỉ thị hợp nhất bên trong một file .gitattributes) nhằm ngăn ngừa các file nhất định bị ảnh hưởng bởi cam kết đã cho.
(ví dụ: nếu một số tệp nhất định mu không được sửa đổi, trình điều khiển đó sẽ đơn giản như là "keep mine" merge. Điều đó đã được sử dụng để merge only specific directories bằng ví dụ, hoặc để theo dõi cách config files are managed mỗi chi nhánh)

THE OP cho biết thêm:.

Nhưng tôi đang tìm kiếm nhiều hơn cho một giải pháp thông minh, nếu có, như "tạo ra một chi nhánh mà có lùi lại chỉ cam kết và áp dụng nó để làm chủ, giả nó trên dev"

giải pháp Clever ...
Vâng, tôi có thể đề nghị git rerere (tái sử dụng độ phân giải ghi nhận của merge mâu thuẫn: nếu bạn hợp nhất để dev kích hoạt xung đột và nếu độ phân giải của cuộc xung đột đó là bạn hủy bỏ hợp nhất hiệu quả đó, bạn có thể ghi lại độ phân giải đó để có thể tự động lặp lại trong lần hợp nhất tiếp theo.

Xem Rerere Your Boat... bởi Scott Chacon để biết thêm thông tin trong lệnh này.

+0

Nên làm việc, nhưng tôi đang tìm kiếm thêm giải pháp thông minh, nếu có, như "tạo chi nhánh chỉ có cam kết hoàn tác và áp dụng nó để làm chủ, giả mạo nó trên dev" –

+0

@becomingGuru: vừa hoàn thành câu trả lời của tôi với 'git rerere' trong trường hợp nó có thể giúp ích. – VonC

0

Tôi sẽ làm điều này với một chi nhánh địa phương (tức là chưa bao giờ được đẩy bất kỳ đâu) trong repo của dev mà tôi sẽ rebase lên đầu nhánh dev bất cứ khi nào tôi kéo từ chủ. Nó không phải là khá liền mạch, nhưng tôi nghĩ rằng nó tốt hơn một chút so với anh đào hái.

+0

Ngay cả khi bạn rebase đến master mới nhất, một thời gian, bạn cần phải hợp nhất master khi commit này vào. –

1

Nói dối với git: tạo sự khác biệt trong một nhánh riêng biệt bắt nguồn từ điểm nhánh của nhánh 'dev' của bạn. Sau đó "hợp nhất" thành chủ mà không thực sự thay đổi chủ: giống như git merge -s ours devfix-branch (bạn làm điều này trên master)

Sau đó quay lại dev và hợp nhất thông thường: git merge devfix-branch. Bây giờ cả hai devmaster sẽ nghĩ rằng họ đã có các devfix, và bạn có thể tiếp tục hợp nhất để làm chủ.

Nó còn lại như là một bài tập để người đọc để xem nếu điều này thực sự hoạt động, hoặc có thể được thực hiện để làm việc.

+0

Tuyệt vời! Cảm ơn! Lần tới tôi muốn làm một điều như vậy, đây là những gì tôi sẽ sử dụng. Hiện tại, tôi đã giải quyết nó bằng cách sử dụng một số tệp được bỏ chọn để xử lý các thay đổi, do đó việc hợp nhất liền mạch! –

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