2012-03-13 34 views
6

Tôi đã hợp nhất chi nhánh của mình thành chủ và được đẩy, suy nghĩ tất cả đều tốt. Hóa ra mã có vấn đề, và tôi muốn một cách để hoàn nguyên hoặc cam kết hợp nhất, hoặc toàn bộ nhánh, tùy theo cái nào thích hợp hơn, để người khác có thể tiếp tục làm việc như thể sự hợp nhất của tôi chưa từng xảy ra.Hoàn nguyên việc hợp nhất chi nhánh xấu

Sau đó, tôi định sửa chi nhánh của mình và hợp nhất lại. Đọc man git-revert gợi ý rằng tôi sẽ có thể hợp nhất lại nếu tôi sử dụng -m để hoàn nguyên toàn bộ chi nhánh.

Trả lời

6

Chỉ cần reset HEAD để trước cam kết:

git reset --hard HEAD^ 

Bạn không nêu trong câu hỏi của bạn nếu bạn đẩy hợp bị lỗi của bạn hay không, vì vậy phải đẩy với --force nếu đây là trường hợp (vì bạn đã viết lại lịch sử trên nhánh chính).

Lưu ý rằng lịch sử viết lại có thể gây ra sự cố cho các nhà phát triển khác nếu họ dựa trên công việc của họ trên đầu trang của lỗi cam kết. Trong trường hợp này, bạn có thể muốn xem xét:

git revert HEAD 

Tuy nhiên, điều này sẽ tạo một cam kết mới trái ngược với cam kết mà HEAD trỏ đến ngay bây giờ và sẽ làm mờ kho lưu trữ. Đặt lại là tốt nhất trong ý nghĩa này kể từ khi bạn thoát khỏi hai cam kết, một trong những lỗi và một để bù đắp cho các bị lỗi.

+0

Xin lỗi, nên đã đề cập rằng tôi đã đẩy. Chính xác thì HEAD sẽ làm gì? Tạo một cam kết "không hợp nhất" để trong HEAD, nhánh của tôi sẽ trông giống như nó không được cam kết, mặc dù lịch sử sẽ hiển thị khác? – Letharion

+0

Chính xác. Lịch sử sẽ hiển thị cam kết hợp nhất bị lỗi của bạn và trên đầu trang của một cam kết khác phủ nhận cam kết bị lỗi. Chỉ cần thử nó, bạn luôn có thể hoàn tác nó với "git reset --hard HEAD ^";) – ralphtheninja

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