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
Trả lời
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
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ẻ.
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
- 1. Hợp nhất một cam kết cụ thể
- 2. Nhận các mục nhập hợp nhất/hợp nhất từ ABAddressBook
- 3. Hợp nhất nhiều tệp .MOBI thành một
- 4. mysql kết hợp các phím duy nhất
- 5. Hợp nhất Git cam kết
- 6. Hợp nhất hai đoạn xml thành một?
- 7. Hủy hợp nhất chi nhánh git, giữ các cam kết sau hợp nhất
- 8. Làm cách nào có thể hợp nhất 3 mảng thành một mảng kết hợp trong PHP
- 9. Hợp nhất các tệp CSS
- 10. Team Foundation Server hợp nhất không hợp nhất
- 11. Hợp nhất các ô trong một JXTreeTable
- 12. Thuật toán kết hợp mờ phù hợp nhất?
- 13. Làm cách nào để hợp nhất tất cả các trường hợp thành một?
- 14. Hợp nhất các tệp PDF
- 15. Hợp nhất các tệp ttf
- 16. ngăn git hợp nhất thành nhánh chính
- 17. (iphone) thành phần UIImage nhanh (hợp nhất)?
- 18. Đang hợp nhất một sự hợp nhất lại một vấn đề trong lật đổ?
- 19. diff git duy nhất để hợp nhất cam kết
- 20. Hợp nhất các đoạn đường 2d
- 21. Kết hợp tất cả CSS vào một StyleSheet duy nhất
- 22. Hợp nhất SVG và .JPG thành một hình ảnh?
- 23. Hợp nhất nhiều tài liệu từ thành một Mở Xml
- 24. Hợp nhất các dự án nhóm
- 25. Hợp nhất các dấu trang trong mercurial
- 26. Hợp nhất hai tệp exe thành một chương trình
- 27. hợp nhất hai tệp
- 28. Subversion: Cách hợp nhất một cam kết cụ thể
- 29. Laravel 4: kết hợp các giá trị/cột duy nhất
- 30. Kết hợp các yếu tố trang nhã nhất trong F #
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ỏ. –
@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