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.
Cú pháp
| Lệnh | Tác dụng |
|---|---|
git merge --abort | Hủy merge bị xung đột, khôi phục trạng thái trước merge |
git reset --merge | Cách cũ tương đương: hủy và đặt lại lần merge |
git merge --quit | Rờ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ống | Lệnh |
|---|---|
| Merge ở local, chưa push | git reset --hard ORIG_HEAD |
| Merge đã được push | git 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ở?
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?
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?
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?
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.