2011-12-22 41 views
5

Giả sử tôi có chi nhánh chính và chi nhánh tính năng. Tôi đã sáp nhập nhánh chính vào chi nhánh tính năng nhiều lần, nhưng tôi chỉ có một vài xung đột hợp nhất rất nhỏ. Tôi muốn làm sạch lịch sử để chỉ có một hợp nhất duy nhất ở cuối. Phương pháp tốt nhất để làm điều này là gì?Kết hợp các hợp nhất thành một hợp nhất

+1

Khi bạn nói xóa lịch sử, bạn cần cụ thể hơn. Nếu bạn muốn loại bỏ các kết hợp từ đường chính thành tính năng, bạn phải quyết định những gì bạn muốn chi nhánh tính năng giống như với các kết hợp được loại bỏ. Ví dụ, nếu một số công việc trong nhánh tính năng phụ thuộc vào các thay đổi được thực hiện trong đường chính (và sau đó được hợp nhất vào nhánh tính năng), việc loại bỏ các kết hợp sẽ làm cho nhánh tính năng của bạn không biên dịch được nữa vì nó phụ thuộc vào mã đã bị loại bỏ. –

+0

@KevinBallard: Đó là một điểm hợp lệ. Trong một số trường hợp, bạn có thể muốn chuyển chi nhánh lên. Tôi không quá lo lắng về điều đó mặc dù cho câu hỏi này, tôi chỉ muốn đảm bảo rằng các chi nhánh chỉ sáp nhập trở lại trong một lần – Casebash

Trả lời

1

Bạn đã xem xét git rebase chưa?

git co -b temp_feature feature 
git rebase master 

Điều này sẽ bỏ qua việc hợp nhất nhưng bạn sẽ phải giải quyết xung đột. Nó cũng tạo ra chi nhánh temp_feature để dễ dàng quay trở lại nhưng cũng có thể đạt được với reflog.

(câu trả lời sai dưới: điều này sẽ tạo ra cam kết duy nhất, không phải là một kết hợp duy nhất: - /)

Tôi nghĩ đơn giản là để làm như sau:

git co master 
git merge --squash feature 

này sẽ tạo ra cam kết duy nhất từ toàn bộ chi nhánh tính năng. Nếu bạn không muốn giữ lại các chi nhánh tính năng làm:

git branch -D feature 
1

Bạn có thể làm một rebase tương tác để đạt được điều này, nhưng bạn chỉ nên làm như vậy nếu bạn chưa chia sẻ rằng lịch sử với bất cứ ai khác. Điều này có nghĩa là trong thực tế là bạn chỉ nên thực hiện việc này nếu bạn chưa thực hiện một số git push cho một repo được chia sẻ.

1

Có vẻ như bạn muốn kết hợp các cam kết không hợp nhất cho nhánh đối tượng vào chi nhánh tính năng sạch, sau đó kết hợp nhánh với tính năng làm sạch mới nhất (bất kể cái gì). Bạn có thể sử dụng rebase để tăng tốc một phần của cherrypicking, mà tiếc là tôi không biết một cách tốt để làm trong một jiffy, vì đây không phải là một cái gì đó tôi làm rất thường xuyên. Nó sẽ giúp nếu bạn có một gui cho phép bạn chọn nhiều cam kết để được cherrypicked cùng một lúc.

Chỉnh sửa: Đây sẽ là giải pháp cụ thể hơn: How to cherry pick a range of commits and merge into another branch

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