2012-02-24 28 views
31

Tôi có một dự án với chi nhánh dev và chi nhánh sản xuất. Gần đây tôi đã làm việc trên một tập hợp các tính năng mới trong dev, vì vậy tôi đã không sáp nhập vào sản xuất trong khoảng hai tuần. Trong khi chờ đợi, mặc dù, có một số lỗi cần được sửa trong sản xuất.Cách tốt nhất để buộc hợp nhất trong git là gì?

Đối với hầu hết các phần, tôi đã có thể thực hiện các bản sửa lỗi trong dev và cherry-chọn chúng vào sản xuất. Đôi khi, tuy nhiên, tôi sẽ cần phải sửa chữa sản xuất bằng tay, như các bản sửa lỗi là đáng kể khác nhau trong hai chi nhánh. Điểm là, hai chi nhánh đã phân kỳ một chút công bằng kể từ khi họ chia tay.

Bây giờ tôi muốn chỉ đẩy tất cả dev vào sản xuất. Tôi không quan tâm đến việc giữ bất kỳ cam kết nào trong sản xuất kể từ khi chia tay, tôi chỉ muốn sản xuất trông giống hệt dev. [EDIT: Tôi muốn sản xuất nhìn chính xác như dev kể từ khi tách, nhưng không muốn viết lại lịch sử trước khi chia tách] Tuy nhiên, khi tôi cố gắng hợp nhất, tôi nhận được hàng chục xung đột mà tôi không muốn khắc phục tay.

Cách tốt nhất để buộc hợp nhất trong git là gì? Tôi có thể hoàn nguyên các thay đổi sản xuất của mình về việc phân chia và sau đó chỉ cần chuyển tiếp nhanh đến chi nhánh dev?

Trả lời

26

Bạn chỉ có thể đẩy chi nhánh dev của bạn lên chi nhánh sản xuất repo thạc sĩ:

git push --force upstream-remote dev:production 

upstream-remote chỉ có thể origin nếu bạn đang ở trên một bản sao mặc định.

cập nhật cho câu hỏi mod'ed:

Bạn có lẽ không muốn revert theo nghĩa git nhưng, vâng, đó là nhiều hơn hoặc ít hơn những gì bạn muốn làm. Một cái gì đó như

git checkout -b merge <split hash> 
git merge dev 
git push --force origin merge:production 

< chia băm > đã cam kết cuối cùng về sản xuất mà bạn muốn giữ.

+0

Hmmm hiện có, thực sự tôi nghĩ tôi misspoke khi tôi nói tôi muốn "sản xuất để trông giống hệt như dev." Ý tôi là tôi muốn chi nhánh trông giống hệt dev * kể từ khi chia *. Đó là, tôi muốn có tất cả các cam kết dev kể từ khi chia tách áp dụng cho sản xuất, mà không quan tâm đến các cam kết sản xuất. Tuy nhiên, tôi không muốn viết lại lịch sử * trước * phần tách, mà nó nghe giống như giải pháp của bạn sẽ làm. –

+1

Hai nhánh giống nhau ở phần tách? Đó là những gì nó giống như âm thanh. Nếu vậy, họ đã có cùng một lịch sử trước khi chia tay và vì vậy bạn không mất bất cứ điều gì. – smparkes

+0

Lịch sử chi nhánh không giống nhau. Tôi đoán tôi giữ lỗi chính tả. Hai tuần trước các tập tin đều giống hệt nhau, và tôi vừa mới sáp nhập từ dev vào sản xuất một cách sạch sẽ. Sau đó họ bắt đầu phân kỳ - đó là điều tôi đang gọi là sự chia rẽ. Nhưng lịch sử của hai nhánh là khác nhau. –

-4

này sẽ hợp nhất newBranch của bạn trong baseBranch

git checkout <baseBranch> // checkout baseBranch 
git merge -s ours <newBranch> // this will simply merge newBranch in baseBranch 
git rm -rf . 
git checkout newBranch -- . 
+0

Người đọc cần lưu ý '-s ours' sẽ ghi đè tác phẩm hiện có trong khi' -X ours' sẽ cho phép không xung đột khác biệt để hợp nhất.'-s ours' sẽ tạo một nhánh có cùng trạng thái với nhau, trong khi' -X our' không đơn giản là một nhánh. Tôi không sửa câu trả lời được đề xuất nhưng chỉ ra một chi tiết quan trọng. – haleonj

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