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.

Chia nhỏ commit

1. Tổng quan

Chia nhỏ commit có thể hữu ích cho việc quản lý code và dễ đọc hơn, hoặc để tách các thay đổi từ các commit lớn hơn.

Lưu ý:

Split không phải là một lệnh Git độc lập, mà là một lệnh con có sẵn trong interactive rebase. 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 Added README

pick Added navbar and fixed bug

pick Updated logo

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

Đầu tiên, hãy nói với Git commit nào bạn muốn chia nhỏ. Trong ví dụ này, chúng ta sẽ chia nhỏ commit thứ hai bằng cách đổi tiền tố lệnh của nó từ pick thành edit:

pick Added README

edit Added navbar and fixed bug

pick Updated logo

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

Tiếp theo, lưu và đóng file soạn thảo (với Vim: nhấn ESC, sau đó gõ :wq rồi Enter). Git sẽ bắt đầu thực thi bộ hướng dẫn và tạm dừng khi gặp commit được đánh dấu bằng edit.

Bạn sẽ thấy thông báo:

Stopped at f124bc5...  Added navbar and fixed bug
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue

2.4. Hủy commit

Trong thời gian tạm dừng này, Git vào trạng thái detached HEAD, nơi con trỏ HEAD tham chiếu đến commit từ bước 2. Để chia nhỏ, hãy hủy commit và di chuyển nội dung của nó trở lại working directory bằng cách sử dụng reset:

git reset HEAD^

Sau khi chạy git status sau khi reset, bạn sẽ thấy các file hiện đang unstaged và sẵn sàng để được stage lại:

Untracked files:
  (use "git add <file>..." to include in what will be committed)

  analytics.js
  navbar.css
  navbar.html

2.5. Tạo lại các commit nhỏ hơn từ nội dung cũ

Commit lại các file bằng cách sử dụng các lệnh add và commit tiêu chuẩn như bên dưới:

git add navbar.css navbar.html
git commit -m 'Added navbar'

git add analytics.js
git commit -m 'Fixed bug'

Bây giờ bạn đã chia một commit lớn thành hai commit nhỏ hơn, mỗi commit có mục đích rõ ràng hơn.

2.6. Tiếp tục rebase

Sau khi bạn đã tạo lại hai commit mới từ các thay đổi cũ, hãy yêu cầu Git tiếp tục quá trình interactive rebase:

git rebase --continue

Git sẽ tiếp tục xử lý các commit còn lại trong bộ hướng dẫn.


3. Lưu ý

  • 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).

  • Khi Git tạm dừng ở commit được đánh dấu edit, bạn đang ở trạng thái detached HEAD. Đây là bình thường và bạn có thể thao tác an toàn.

  • Bạn có thể chia một commit thành nhiều commit nhỏ hơn bằng cách thêm và commit các file theo từng nhóm logic.

  • Hãy đảm bảo bạn commit tất cả các file từ commit gốc. Nếu bạn quên một số file, chúng sẽ bị mất khi tiếp tục rebase.

  • Split hữu ích khi bạn có một commit lớn chứa nhiều thay đổi không liên quan, và muốn tách chúng thành các commit nhỏ hơn, có ý nghĩa hơn.


Tổng kết

Split cho phép bạn chia một commit lớn thành nhiều commit nhỏ hơn. Quy trình bao gồm sáu 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 edit cho commit muốn chia nhỏ, thực thi bộ hướng dẫn để Git tạm dừng, hủy commit bằng git reset HEAD^, đóng gói lại nội dung commit thành nhiều commit mới, và tiếp tục rebase bằng git rebase --continue.

Hãy nhớ rằng split 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. Việc chia nhỏ commit giúp tạo ra một lịch sử commit rõ ràng và dễ theo dõi hơn.

Tiếp theo: Quiz