2011-07-20 28 views
20

Tôi có một chi nhánh tổng thể như thế này ..Xóa cam kết Git cũ khỏi chi nhánh mà không sử dụng bản vá ngược?

A -- B -- C -- D -- E -- HEAD 

Có bất kỳ lệnh đó loại bỏ một trong những cũ cam kết và giữ chân những người khác, nói cam kết C?

cuối cùng nó trở nên như thế này

A -- B -- D -- E -- HEAD 

tôi biết rằng chúng tôi có thể sử dụng một bản vá ngược và áp dụng một mới cam kết với bản vá ngược để loại bỏ cam kết C, nhưng cơ cấu cây sẽ không được như vậy rõ ràng và trông cồng kềnh , tức là

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD 

Có ai biết không?

Trả lời

28

Sử dụng tính năng rebase tương tác. Ví dụ: để quay lại 5 cam kết:

git rebase -i HEAD~5 

Sau đó, trong trình chỉnh sửa bật lên, xóa dòng chứa cam kết bạn muốn xóa.

+7

Với cảnh báo thông thường không làm điều này nếu bạn đã đẩy điều này ở nơi khác. – manojlds

+5

Với ngoại lệ thông thường mà bạn chắc chắn bạn là người duy nhất sử dụng điều khiển từ xa bạn đã đẩy nó vào. –

+4

Với phụ lục thông thường cũng có thể nếu bạn thông báo cho tất cả các nhà phát triển khác và họ có thể khắc phục nó vào ngày kết thúc của họ –

4

Interactive rebase công trình, nhưng để làm điều đó chỉ với một lệnh:

git rebase --onto B C 

Tuy nhiên xem các ý kiến ​​về câu trả lời "rebase tương tác". Họ cũng áp dụng ở đây.

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