Hủy bỏ hợp nhất Git


119

Tôi đang làm việc trong một dự án sử dụng Git làm VCS. Tôi nhận được một nhánh xyzcắt từ nhánh chính của master. Sau khi làm việc một thời gian, tôi đã xác nhận mã của mình và kéo đường dây chính của chi nhánh.

Kéo là tốt. Sau đó tôi đã hợp nhất mã với master. Sau khi hợp nhất, đã xảy ra sự cố trong một số tệp nhất định. Tôi đã không cam kết mã sau khi hợp nhất. Ai đó có thể vui lòng hướng dẫn cách tôi có thể hủy bỏ việc hợp nhất này và đưa chi nhánh của tôi nơi tôi đang làm việc hiện tại về trạng thái như trước khi tôi hợp nhất không?



Bạn không thể khôi phục cam kết trước đó của chi nhánh?
Wutipong Wongsakuldej


1
Lưu ý rằng trong Git, revertlà tên của lệnh tạo một cam kết mới hoàn nguyên các thay đổi trong một cam kết trước đó, vì vậy đó có thể không phải là từ bạn đang tìm kiếm ở đây. Tôi đã chỉnh sửa câu hỏi của bạn để làm rõ.
Scott Weldon

Câu trả lời:


296

miễn là bạn không cam kết, bạn có thể gõ

git merge --abort

giống như dòng lệnh được đề xuất.


4
Tôi nhận được thông báo này khi thử cái này: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs 21/02/19

1
@Ahmad git không bắt đầu hợp nhất với các thay đổi chưa được cam kết (của các tệp đã được theo dõi) tại chỗ. git không thể bảo vệ những gì nó không biết.
Timothy Truckle

vâng bạn là tôi đã học được nó bằng cách làm mất mã của tôi. đây là chi tiết về vấn đề của tôi, cách tôi gặp phải vấn đề. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad

23

Nếu bạn thực hiện "trạng thái git" trong khi có xung đột hợp nhất, điều đầu tiên git chỉ cho bạn là cách hủy hợp nhất.

đầu ra của trạng thái git trong khi có xung đột hợp nhất


Tuyệt vời, điều này đã gợi ý cho tôi git reset HEAD <file>cách xóa hiệu quả có thể thu gọn "hợp nhất" khỏi điều khiển nguồn của phần mở rộng git => sau đó tôi có thể giải quyết xung đột hoặc chỉ hoàn nguyên các thay đổi của mình trong danh sách phần mở rộng GIT :)
jave.web

6

Sự thật mà nói có rất nhiều tài nguyên giải thích cách làm điều này đã có trên web:

Git: làm thế nào để hợp nhất ngược một cam kết?

Git: làm thế nào để hợp nhất ngược một cam kết?

Đang hoàn tác Hợp nhất , từ blog của Git (truy xuất từ ​​Wayback Machine của archive.org)

Vì vậy, tôi đoán tôi sẽ chỉ tóm tắt một số trong số này:

  1. git revert <merge commit hash>
    Điều này tạo thêm một cam kết "hoàn nguyên" nói rằng bạn hoàn tác một hợp nhất

  2. git reset --hard <commit hash *before* the merge>
    Lịch sử này đặt lại thành trước khi bạn thực hiện hợp nhất. Nếu bạn có cam kết sau khi hợp nhất, bạn sẽ cần phải cam kết sau cherry-pickđó.

Nhưng thành thật mà nói , hướng dẫn này ở đây tốt hơn bất cứ điều gì tôi có thể giải thích, bằng sơ đồ! :)


1
Liên kết đã biến mất. Thở dài.
SMBiggs

@ScottBiggs Tôi nghĩ họ đã chuyển nó sang git-scm.com/book/en/v2/… . Denis, nếu bạn đọc cái này, bạn có thể kiểm tra không? Và nếu nó thực sự giống nhau, bạn có thể vui lòng cập nhật liên kết trong câu trả lời của bạn? Cảm ơn bạn!
Fabio nói Hãy phục hồi Monica vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.