2012-04-12 32 views
8

Tôi có một số cam kết mà tôi không muốn trong dự án của mình, nhưng có một cam kết dựa trên chúng mà tôi muốn trong đó. Đây là GitHub của tôi "Network" đồ thị của các kho lưu trữ (ASCII, như tôi vẫn không thể đăng hình ảnh):Làm cách nào để bỏ qua các cam kết trong git?

[]--[]--[_] 
|  | 
|  ------->| 
---------->[·]--[·]--[*] 

(-> có nghĩa là một merge)

Tôi muốn xóa những thay đổi được thực hiện trong hai [·] cam kết, và căn cứ [*] một trên [_] ở trên. Tôi đã thử hợp nhất và rebasing, nhưng họ áp dụng các thay đổi của các cam kết không mong muốn. Có thể không?

Xin lỗi nếu tôi không rõ ràng, tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi. Cảm ơn trước.

Trả lời

10

tôi có thể cung cấp cho bạn hai lựa chọn:

  • Interactive rebase (git rebase -i) trình bày bạn một danh sách các cam kết, chỉnh sửa danh sách này sẽ thay đổi kết quả của các hoạt động; cho phép bạn sắp xếp lại, xóa hoặc gắn thẻ các cam kết này cho các hoạt động khác. Trong trường hợp của bạn, bạn có thể rebase chi nhánh của [*] thành [_] và xóa các đường cam kết không mong muốn.

  • Cherrypick cho phép bạn áp dụng các thay đổi của cam kết đơn thành một chi nhánh khác. Trong trường hợp của bạn, bạn có thể chỉ cần cherrypick cam kết [*] vào chi nhánh của [_].

2

Bạn có thể kiểm tra _ của bạn và cherry pick các *. Nếu bạn muốn điều đó trên một nhánh riêng biệt, bạn có thể rẽ nhánh từ _ trước khi thực hiện việc này.

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