Commit trong Git là gì?

Trong Git, một commit là một điểm lưu trữ trong lịch sử của dự án, nơi trạng thái hiện tại của mã nguồn được lưu lại. Mỗi commit lưu giữ một snapshot của tất cả các tệp trong dự án tại thời điểm thực hiện commit, giúp người phát triển theo dõi các thay đổi và dễ dàng quay lại các phiên bản trước của mã nếu cần. Commit được sử dụng để ghi lại quá trình phát triển của dự án và là một phần quan trọng trong việc quản lý phiên bản mã nguồn.

Cấu trúc của một commit:

Mỗi commit trong Git bao gồm:

  • Commit message: Lời giải thích ngắn gọn về thay đổi (cần rõ ràng và có ý nghĩa).
  • Metadata: Bao gồm thông tin về tác giả, thời gian thực hiện commit, và ID duy nhất (SHA-1 hash) của commit.
  • Snapshot: Một snapshot của toàn bộ dự án vào thời điểm commit, giúp tái tạo lại trạng thái dự án bất kỳ lúc nào trong quá khứ.

Trường hợp sử dụng commit trong Git

Dưới đây là tất cả các trường hợp sử dụng commit trong Git và các tình huống khi chúng ta cần commit:


1. Ghi lại các thay đổi mã nguồn

  • Mục đích: Ghi lại bất kỳ thay đổi nào trong mã nguồn của dự án.
  • Ví dụ: Bạn thêm một tính năng mới hoặc sửa lỗi và muốn lưu lại những thay đổi này.

Cách sử dụng:

git add .
git commit -m "Added new feature X"

2. Phân tách thay đổi logic thành nhiều commit nhỏ

  • Mục đích: Thay vì commit tất cả các thay đổi lớn cùng một lúc, chia nhỏ thành các commit rõ ràng và dễ hiểu. Điều này giúp theo dõi và debug dễ hơn.
  • Ví dụ: Thay vì commit toàn bộ thay đổi cho cả frontend và backend cùng một lúc, hãy commit riêng từng phần.

Cách sử dụng:

git add file1.php
git commit -m "Updated file1.php for frontend improvements"
git add file2.php
git commit -m "Updated file2.php for backend optimizations"

3. Sửa lỗi (Bug fix)

  • Mục đích: Khi bạn sửa một lỗi, bạn sẽ commit thay đổi đó với một thông điệp rõ ràng để chỉ ra rằng commit này chứa một bản sửa lỗi.
  • Ví dụ: Sửa lỗi về giao diện hiển thị trên mobile.

Cách sử dụng:

git add .
git commit -m "Fixed mobile layout issue"

4. Sửa đổi commit trước đó (--amend)

  • Mục đích: Thay đổi hoặc cập nhật commit cuối cùng, có thể là bổ sung tệp tin còn sót hoặc chỉnh sửa lại thông điệp commit.
  • Ví dụ: Bạn quên thêm tệp tin quan trọng trong commit trước đó hoặc muốn chỉnh sửa lại thông điệp commit.

Cách sử dụng:

git add .
git commit --amend -m "Updated commit message or added missing files"

5. Rollback commit – Quay lại commit trước đó

  • Mục đích: Khi phát hiện commit hiện tại có vấn đề và cần quay lại commit trước đó để khôi phục trạng thái ổn định.
  • Ví dụ: Bạn vừa thực hiện một commit nhưng sau đó phát hiện ra lỗi nghiêm trọng.

Cách sử dụng:

git revert <commit-id>

6. Tạo commit cho công việc trên nhánh mới

  • Mục đích: Khi bạn bắt đầu một tính năng mới hoặc làm việc trên một nhánh phụ, bạn cần commit những thay đổi đó vào nhánh mới mà không ảnh hưởng đến nhánh chính.
  • Ví dụ: Bạn đang phát triển một tính năng mới và muốn lưu các thay đổi trên nhánh riêng biệt.

Cách sử dụng:

git checkout -b new-feature
git add .
git commit -m "Started working on new feature"

7. Squash commit (Nén commit)

  • Mục đích: Hợp nhất nhiều commit nhỏ lại thành một commit lớn để làm gọn lịch sử commit, đặc biệt khi bạn có nhiều commit nhỏ không cần thiết.
  • Ví dụ: Sau khi hoàn thành một tính năng, bạn muốn gộp tất cả commit nhỏ thành một commit lớn.

Cách sử dụng:

git rebase -i HEAD~n   # n là số lượng commit muốn gộp

8. Commit không cần thêm tệp mới (--no-add)

  • Mục đích: Khi bạn chỉ cần commit các thay đổi đã được track mà không thêm các tệp mới chưa được theo dõi.
  • Ví dụ: Bạn đã chỉnh sửa các tệp hiện tại và không muốn thêm các tệp mới vào commit.

Cách sử dụng:

git commit -a -m "Committed only tracked changes"

9. Chia sẻ commit với người khác (Push)

  • Mục đích: Khi bạn đã hoàn thành một commit và muốn chia sẻ các thay đổi đó lên remote repository (ví dụ: GitHub).
  • Ví dụ: Bạn đã làm xong một tính năng mới và muốn chia sẻ với nhóm của mình.

Cách sử dụng:

git push origin branch-name

10. Commit nhưng không hiển thị thông tin cá nhân (--author)

  • Mục đích: Khi bạn cần commit nhưng không muốn hiển thị thông tin cá nhân, hoặc thay đổi tác giả của commit.
  • Ví dụ: Bạn đang làm việc dưới tài khoản chung và cần ghi đè thông tin tác giả commit.

Cách sử dụng:

git commit --author="Author Name <[email protected]>" -m "Commit message"

11. Commit tạm thời sử dụng Git stash

  • Mục đích: Khi bạn đang làm việc dở dang và cần chuyển đổi sang một công việc khác mà không muốn commit các thay đổi tạm thời.
  • Ví dụ: Bạn đang làm dở một tính năng nhưng cần gấp sửa lỗi khác trên nhánh chính.

Cách sử dụng:

git stash
git checkout master

12. Undo commit (không đẩy lên remote)

  • Mục đích: Khi bạn vừa thực hiện một commit nhưng chưa đẩy lên remote và muốn quay lại thay đổi trước commit đó.
  • Ví dụ: Commit mới tạo chứa lỗi và bạn muốn quay lại để sửa.

Cách sử dụng:

git reset --soft HEAD~1

13. Tag commit (Đánh dấu commit quan trọng)

  • Mục đích: Đánh dấu một commit quan trọng (ví dụ: một phiên bản phát hành) bằng cách sử dụng tag để dễ dàng tìm kiếm lại sau này.
  • Ví dụ: Bạn muốn đánh dấu commit hiện tại là phiên bản 1.0.

Cách sử dụng:

git tag v1.0
git push origin v1.0

Tổng kết

Commit là một trong những thao tác cơ bản và quan trọng nhất trong Git, giúp ghi lại lịch sử phát triển của dự án và cho phép theo dõi mọi thay đổi. Tùy theo trường hợp sử dụng, commit có thể được sử dụng để ghi lại các thay đổi, sửa lỗi, quản lý nhánh, rollback phiên bản, và tối ưu hóa lịch sử commit. Sử dụng commit hợp lý giúp quản lý mã nguồn dễ dàng và hiệu quả hơn trong các dự án phần mềm.