Tôi có hai nhánh của chủ, mỗi nhánh cho một đối tượng khác, và sau đó tôi có một nhánh tổng hợp kết hợp cả hai. Tôi đã cam kết một thứ gì đó với nhánh tổng hợp, nhưng bây giờ tôi thấy tôi sẽ áp dụng thay đổi đó cho một trong những nhánh cụ thể cho tính năng đó. Có cách nào để làm điều này unapply/áp dụng một nơi nào khác cơ động với git?Trong git, làm thế nào để loại bỏ một cam kết từ một chi nhánh và áp dụng nó cho một chi nhánh khác nhau?
21
A
Trả lời
27
Cherry-pick cam kết nhắm mục tiêu chi nhánh và đặt lại nhánh nguồn. Giả sử, bạn muốn di chuyển cam kết mới nhất từ source
chi nhánh để target
, làm:
git checkout target
git cherry-pick source
git checkout source
git reset --hard source^
Nếu cam kết không phải là cuối cùng, bạn sẽ phải sử dụng git rebase -i
thay vì lệnh cuối cùng và chọn cụ thể cam kết tên cho cherry-pick
của bạn.
2
Nói chung, khi tôi làm điều gì đó như thế này, tôi sẽ:
- Tạo một file vá ngược sử dụng git diff (ví dụ
git diff HEAD^ HEAD
) - Apply vá ngược này đến chi nhánh Tôi muốn loại bỏ các thay đổi từ.
- Kiểm tra các chi nhánh I DO muốn sự thay đổi trên
- Sử dụng
git cherry-pick
áp dụng áp dụng cam kết
Tôi tin rằng có một cách dễ dàng hơn, nhưng tôi thích điều này kể từ khi tôi sử dụng (và nhớ) diff/lệnh chọn cherry-pick tốt hơn
+3
Các bước 1 + 2 == trở lại git – Dustin
Các vấn đề liên quan
- 1. Di chuyển các cam kết từ một chi nhánh này sang một chi nhánh khác
- 2. Từ chủ, cam kết đến một chi nhánh khác
- 3. Tạo chi nhánh git dựa trên một chi nhánh khác
- 4. Làm thế nào để thiết lập lại một chi nhánh đến một chi nhánh khác với git?
- 5. Cam kết thay đổi cho nhiều chi nhánh trong Git
- 6. Chỉ kết hợp một changeset từ một chi nhánh khác
- 7. Làm thế nào để di chuyển tất cả các cam kết từ một chi nhánh khác?
- 8. Làm thế nào để đẩy từ chi nhánh này sang chi nhánh khác và thanh toán?
- 9. Giữ hai chi nhánh Git khác nhau theo một tệp
- 10. git áp dụng các thay đổi từ một cam kết lên một nhánh khác
- 11. chi nhánh git (không có chi nhánh)
- 12. SVN chi nhánh của một chi nhánh
- 13. Làm cách nào để tạo chi nhánh Git mới từ một cam kết cũ?
- 14. git: làm thế nào để di chuyển một số cam kết với chi nhánh mới
- 15. Làm thế nào để git cam kết --amend một cam kết đó là cơ sở của một chi nhánh
- 16. Làm thế nào để đóng một chi nhánh Git?
- 17. Git: Làm thế nào để rebase và squash cam kết từ chi nhánh đến master?
- 18. Git: tạo ra chi nhánh mới từ một chi nhánh sai
- 19. TFS: Ghi đè chi nhánh với một chi nhánh khác
- 20. Tạo chi nhánh bên trong một nhánh trong git
- 21. Có thể áp dụng cam kết cho tất cả các chi nhánh trong git không?
- 22. làm cho chi nhánh git chi nhánh chính
- 23. git dàn dựng và cam kết giữa nhiều chi nhánh
- 24. Git danh sách chi nhánh sáp nhập vào một chi nhánh nhưng không phải vào một
- 25. Git - Làm thế nào để xem chi nhánh có EVER được sáp nhập vào một chi nhánh khác?
- 26. Làm thế nào để anh đào chọn một loạt các cam kết và hợp nhất thành một chi nhánh khác
- 27. Kéo tất cả các cam kết từ một chi nhánh, đẩy cam kết nào đó sang
- 28. TFS đặt giá trị di chuyển từ một chi nhánh này sang một chi nhánh khác
- 29. Git: nhận các thay đổi từ một chi nhánh khác
- 30. Git cam kết submodule chung (chi nhánh chính)
Cảm ơn! Hoạt động tuyệt vời. – prismofeverything
Lưu ý rằng thiết lập lại/rebase cả hai làm ** lịch sử viết lại **, vì vậy họ không nên được sử dụng nếu lịch sử đã được xuất bản - sau đó bạn sẽ phải sử dụng git-revert thay thế. –