HocTotGit.io

Git nâng cao (Advanced)
  • Lý thuyết về rebase
  • Thực hiện Rebase
  • Giải quyết conflict khi rebase
  • Rebase vs Merge
  • Quiz
  • Rebase interactive
  • Thay đổi commit message
  • Xóa commit
  • Sắp xếp lại commit
  • Squash commit
  • Chia nhỏ commit
  • Quiz
Liên kết
Blog
Hỗ trợ

Email: work.lamsun@gmail.com

Yêu thích nền tảng

Hãy chia sẻ ý kiến của bạn

HocTotGit.io

© 2026 HocTotGit.

Xóa commit

1. Tổng quan

Có những tình huống mà việc xóa commit khỏi lịch sử Git có thể hữu ích. Để xóa/hủy các commit gần đây, bạn có thể thử lệnh reset; tuy nhiên, để xóa các commit tồn tại xa hơn trong lịch sử, hãy sử dụng interactive rebase.

Lưu ý:

Delete không phải là một lệnh Git độc lập, mà là một trong những lệnh có sẵn trong mode interactive rebase khi chạy lệnh git rebase -i. Hãy đảm bảo bạn đã hiểu về interactive rebase trước khi học bài này.


2. Quy trình

2.1. Chọn các commit cần thao tác

Bắt đầu bằng việc nói với Git bạn muốn thao tác trên những commit nào bằng cách chỉ định một chuỗi các commit bắt đầu từ con trỏ HEAD trở về trước:

git rebase -i HEAD~3

Lệnh này sẽ cho phép bạn thao tác trên 3 commit gần nhất.

2.2. Tạo bộ hướng dẫn

Sau khi thực thi lệnh rebase, Git sẽ mở trình soạn thảo văn bản mặc định trong terminal của bạn (thường là Vim) và hiển thị một bộ hướng dẫn mặc định. Các commit từ chuỗi đã chọn được liệt kê ở đầu file này:

pick 2f8e823 Refactored screenreader attributes

pick 7f9d4bf Updated README

pick 3f8e810 Accessibility fix

# Rebase 4095f73..ec48d74 onto 4095f73 (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
...

Để xóa một commit, hãy tìm commit bạn muốn xóa và đổi tiền tố của nó từ pick thành drop (nếu bạn đang sử dụng Vim, nhấn i để vào chế độ insert và thực hiện thay đổi).

Ví dụ, để xóa commit "Updated README":

pick 2f8e823 Refactored screenreader attributes

drop 7f9d4bf Updated README

pick 3f8e810 Accessibility fix

2.3. Thực thi bộ hướng dẫn

Sau khi chỉnh sửa xong file hướng dẫn (đã đổi pick thành drop ở những commit muốn xóa), bạn cần lưu và đóng file soạn thảo (với Vim: nhấn ESC, sau đó gõ :wq rồi Enter).

Khi interactive rebase thực thi bộ hướng dẫn, nó sẽ không viết lại các commit được đánh dấu bằng "drop" trở lại cây lịch sử, từ đó loại bỏ chúng khỏi lịch sử commit một cách hiệu quả.


3. Cảnh báo về lỗi và xung đột

Cảnh báo:

Nếu các commit gần đây hơn dựa trên các thay đổi có trong commit bị xóa, Git sẽ hủy bỏ thao tác. Nếu điều này xảy ra, hãy thử sử dụng reset để hủy commit thay vì xóa nó.

Ví dụ về xung đột khi xóa

Nếu xảy ra xung đột, các thông báo sau sẽ được trả về bởi thao tác:

CONFLICT (content): Merge conflict
error: could not apply d81b1f0

Khi gặp lỗi này, bạn có hai lựa chọn:

  1. Hủy bỏ thao tác: Sử dụng git rebase --abort để quay về trạng thái ban đầu.

  2. Sử dụng reset thay thế: Nếu bạn muốn loại bỏ commit nhưng gặp xung đột, hãy cân nhắc sử dụng git reset thay vì xóa commit trong interactive rebase.


4. Lưu ý

  • Nếu bạn chỉ muốn xóa commit gần nhất, hãy sử dụng git reset HEAD~1 thay vì interactive rebase.

  • Khi sử dụng Vim, nhớ rằng bạn cần vào chế độ insert (i) để chỉnh sửa, và thoát chế độ insert (ESC) trước khi lưu (:wq).

  • Bạn có thể xóa nhiều commit trong cùng một lần interactive rebase bằng cách đổi pick thành drop cho tất cả các commit bạn muốn xóa.

  • Hãy cẩn thận khi xóa commit, vì điều này sẽ xóa vĩnh viễn các thay đổi trong commit đó. Đảm bảo bạn không cần những thay đổi đó trước khi xóa.


Tổng kết

Delete cho phép bạn loại bỏ các commit khỏi lịch sử dự án. Quy trình bao gồm ba bước: chọn các commit cần thao tác, tạo bộ hướng dẫn bằng cách đổi pick thành drop, và thực thi bộ hướng dẫn để xóa commit khỏi lịch sử.

Hãy nhớ rằng delete chỉ nên được sử dụng trên các commit local chưa được chia sẻ để tránh gây xung đột cho các thành viên khác trong team. Nếu gặp xung đột khi xóa commit, hãy cân nhắc sử dụng reset thay thế.

Tiếp theo: Sắp xếp lại commit