Xóa một commit từ một branch

Có thể bạn sẽ không bao giờ nghĩ đến việc phải xóa một commit trong Git. Tuy nhiên, biết đâu đấy, trong tương lai, có khi bạn lại cần đến nó. Bài viết này sẽ chia sẻ với các bạn cách xóa một commit cụ thể trên một branch nào đó bằng cách sử dụng git rebase -i. Cách xóa này sẽ khác với việc sử dụng git revert, vì nó không tạo thêm một commit nào sau khi xóa.

Chúng ta sẽ bắt đầu với một cây các commits như sau:

/tmp/test$ git log --graph --all --oneline --decorate
* 16ab9a2 (HEAD, dev) Commit B1
* 077795b Commit A1
| * 9dec2b5 (master) Commit D
|/
* ea61baa Commit C
* 786219e Commit B
* 2fa7d48 Commit A

Ví dụ của mình là xóa “Commit C” từ branch DEV. Để làm được điều đó, chúng ta thực hiện lên sau khi đang ở branch DEV:

git rebase -i ea61baa^

Trong đó, ea61baa là hash key của “Commit C”. Và dấu ^ thể hiện rằng bạn muốn rebase bao gồm cả “Commit C”. Sau khi vào lệnh, một editor (vi hoặc nano) sẽ bật lên với nội dung sau:

pick ea61baa Commit C
pick 077795b Commit A1
pick 16ab9a2 Commit B1
# Rebase 786219e..16ab9a2 onto 786219e
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Đến đây, chúng ta chỉ cần xóa dòng pick ea61baa Commit C, ghi và thoát editor.

Chúng ta thu được kết quả như sau:

/tmp/test$ git log --graph --all --oneline --decorate
* f8814f4 (HEAD, dev) Commit B1
* 1377c45 Commit A1
| * 9dec2b5 (master) Commit D
| * ea61baa Commit C
|/
* 786219e Commit B
* 2fa7d48 Commit A

Như vậy là chúng ta đã hoàn thành ví dụ “Xóa một commit từ một branch”.

Các bạn có thể xem thêm video của mình trên Youtube

Hoặc đọc bản Tiếng Anh ở đây Delete a commit from a Git Branch

Tin liên quan

Hướng dẫn cài đặt Let’s Encrypt miễn phí trong cPanel Hướng dẫn cài đặt Let’s Encrypt miễn phí trong cPanel Postfix – Sendmail Postfix – Sendmail Cấu hình site WP Cấu hình site WP How To Set Up vsftpd for a User's Directory on Ubuntu 16.04 How To Set Up vsftpd for a User's Directory on Ubuntu 16.04