Menu
CoddyTech

Git: Hủy một lần merge

Cập nhật lần cuối

Nếu git merge gặp xung đột (conflict) và bạn muốn rút lui thay vì giải quyết, git merge --abort sẽ hủy lần merge đó và đưa nhánh của bạn về đúng trạng thái trước khi bắt đầu. Đây là lối thoát gọn gàng khi một lần merge đi chệch hướng.

Với lần merge đã hoàn tất, cách hoàn tác sẽ khác, xem bên dưới. Thử các lệnh này trong playground terminal: một shell thật ngay trên trình duyệt.

git merge --abort hủy lần merge bị xung đột và đưa nhánh về trạng thái trước khi bắt đầu merge.

Cú pháp

LệnhTác dụng
git merge --abortHủy merge bị xung đột, khôi phục trạng thái trước merge
git reset --mergeCách cũ tương đương: hủy và đặt lại lần merge
git merge --quitRời khỏi merge nhưng giữ nguyên working tree

Hoàn tác một lần merge đã xong

Khác với việc hủy: merge commit đã tồn tại.

Tình huốngLệnh
Merge ở local, chưa pushgit reset --hard ORIG_HEAD
Merge đã được pushgit revert -m 1 <merge-hash>

Câu hỏi thường gặp về hủy merge trong Git

Làm sao để hủy một lần merge đang dở?
Chạy git merge --abort. Nếu merge dừng lại vì xung đột và bạn không muốn giải quyết, lệnh này hủy toàn bộ thao tác và đưa nhánh cùng working tree về đúng như trước khi bắt đầu merge.
git merge --abort và git reset --merge khác nhau thế nào?
Về cơ bản chúng làm cùng một việc: hủy merge đang dở và khôi phục trạng thái trước merge. git merge --abort là lệnh hiện đại, được tạo ra riêng cho việc này; git reset --merge là cách cũ hơn nhưng vẫn dùng được. Nên ưu tiên git merge --abort vì dễ hiểu hơn.
Làm sao để hoàn tác một lần merge đã hoàn tất?
Đó không còn là hủy nữa, vì merge commit đã tồn tại. Nếu merge chỉ nằm ở local, git reset --hard ORIG_HEAD đưa nhánh về vị trí trước khi merge; lệnh này dùng được cả sau một lần fast-forward, trường hợp mà HEAD~1 không làm được. Lệnh này xóa mọi thay đổi chưa commit, nên hãy kiểm tra git status trước. Nếu đã push merge, dùng git revert -m 1 <merge-hash> để đảo ngược nó mà không phải viết lại lịch sử chung.
Hủy merge có làm mất các thay đổi khác không?
git merge --abort khôi phục trạng thái ngay trước merge, nên các thay đổi do merge mang vào sẽ bị bỏ, còn những gì bạn đã commit vẫn nguyên vẹn. Nếu bạn có thay đổi chưa commit trước khi bắt đầu merge, hãy commit hoặc stash chúng trước, vì lệnh hủy sẽ khôi phục trạng thái của commit trước merge.
Có thể luyện tập lệnh này online không?
Có. Mở playground terminal để chạy git merge --abort trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn merge và giải quyết xung đột từng bước.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu