[Git cơ bản] Cách dùng Git log: Nắm lịch sử commit trong lòng bàn tay

VnnTools

Trong thế giới lập trình, Git giống như một cuốn nhật ký ghi lại mọi thay đổi, mọi bước đi của dự án. Và nếu Git là cuốn nhật ký, thì git log như là "cỗ máy thời gian" cho phép bạn du hành về quá khứ, xem ai đã làm gì, khi nào, và tại sao.

Cách dùng Git log: Nắm lịch sử commit trong lòng bàn tay

Tuy nhiên, với nhiều người, git log mặc định trông như một mớ hỗn độn khó đọc. Đừng lo! Bài viết này sẽ giúp bạn biến git log từ một công cụ đáng sợ thành người bạn đồng hành đắc lực nhất, giúp bạn gỡ rối, phân tích và quản lý dự án như một chuyên gia. ✨

1. Bước chân đầu tiên: Git log nguyên bản

Khi bạn gõ lệnh git log và nhấn Enter, bạn sẽ thấy một danh sách các "commit" (những lần lưu thay đổi) theo thứ tự từ mới nhất đến cũ nhất. Mỗi mục log thường bao gồm:

  • Mã hash (commit hash): Một chuỗi ký tự dài và duy nhất, giống như "chứng minh nhân dân" của mỗi commit.
  • Tác giả (Author): Ai đã thực hiện thay đổi.
  • Ngày tháng (Date): Khi nào thay đổi được thực hiện.
  • Thông điệp (Commit message): Lời nhắn giải thích về thay đổi đó.
commit a89c4d516e256f0c624c878a1e2f5756910e5a6d (HEAD -> main)
Author: An Nguyen <an.nguyen@email.com>
Date:   Tue Aug 19 14:20:10 2025 +0700

    feat: Add user authentication feature

commit 3b3e1b8b3e3e4b3e5b3e6b3e7b3e8b3e9b3ea1b1
Author: Binh Tran <binh.tran@email.com>
Date:   Mon Aug 18 10:05:30 2025 +0700

    fix: Correct calculation error in payment module

Trông khá dài dòng phải không? Giờ là lúc chúng ta "trang điểm" cho nó!

2. "Tân trang" giao diện: Giúp git log gọn gàng và đẹp mắt 🎨

Đây là những tham số phổ biến nhất để biến ouput của git log trở nên thân thiện hơn rất nhiều.

Xem phiên bản rút gọn với --oneline

Việc thêm --oneline giúp cô đọng mỗi commit trên một dòng duy nhất, chỉ hiển thị mã hash rút gọn và tiêu đề commit.

git log --oneline

Kết quả:

a89c4d5 (HEAD -> main) feat: Add user authentication feature
3b3e1b8 fix: Correct calculation error in payment module

Thật gọn gàng!

Vẽ nên lịch sử với --graph

Khi dự án có nhiều nhánh (branch) và chúng được gộp (merge) vào nhau, lịch sử sẽ trở nên phức tạp. --graph sẽ vẽ một biểu đồ ASCII trực quan hóa các nhánh và merge, giúp bạn thấy rõ dòng chảy của dự án.

Hãy kết hợp nó với --oneline để có một "bức tranh" lịch sử hoàn hảo.

git log --graph --oneline --all

Lưu ý: --all để xem lịch sử của tất cả các nhánh, không chỉ nhánh hiện tại.

Tùy biến hiển thị với --pretty=format

Đây là lúc bạn thể hiện "quyền lực" của mình! --pretty=format cho phép bạn tự định dạng output theo ý muốn với các "placeholder" đặc biệt:

  • %h: Mã hash rút gọn
  • %H: Mã hash đầy đủ
  • %s: Tiêu đề commit (subject)
  • %an: Tên tác giả (author name)
  • %ar: Thời gian tương đối (relative date, ví dụ: "2 hours ago")
  • %ad: Thời gian cụ thể (author date)
  • %d: Con trỏ tham chiếu, ví dụ: (HEAD -> main, origin/main)

Ví dụ một định dạng "xịn sò":

git log --pretty=format:"%h - %an, %ar : %s"

Kết quả:

a89c4d5 - An Nguyen, 2 hours ago : feat: Add user authentication feature
3b3e1b8 - Binh Tran, 1 day ago : fix: Correct calculation error in payment module

3. Lọc lịch sử: Trở thành "thám tử" tìm kiếm 🔍

Khi lịch sử dự án dài hàng ngàn commit, việc xem tất cả là bất khả thi. Đây là lúc kỹ năng lọc và tìm kiếm tỏa sáng.

Lọc theo số lượng

Chỉ muốn xem 5 commit gần nhất? Đơn giản!

git log -n 5
# hoặc
git log -5

Lọc theo thời gian

Tìm các commit được thực hiện trong khoảng thời gian nhất định.

# Commit trong 2 tuần gần nhất
git log --since="2 weeks"

# Commit trước ngày 15/08/2025
git log --until="2025-08-15"

# Kết hợp: Commit của tác giả 'An Nguyen' từ 1/8 đến 15/8
git log --author="An Nguyen" --since="2025-08-01" --until="2025-08-15"

Lọc theo tác giả

Xem những đóng góp của một thành viên cụ thể.

git log --author="Binh Tran"

Lọc theo nội dung commit message

Bạn nhớ rằng có một commit liên quan đến "payment" nhưng không nhớ chi tiết? --grep sẽ giúp bạn.

git log --grep="payment"

Lưu ý: Mặc định --grep phân biệt chữ hoa/thường. Thêm -i để tìm kiếm không phân biệt (--grep="payment" -i).

Lọc theo thay đổi trong file cụ thể

Đây là một trong những tính năng mạnh mẽ nhất! Ai đã thay đổi file header.component.css?

git log -- header.component.css

Lọc theo một khoảng commit

Xem các commit có ở nhánh feature nhưng chưa có ở nhánh main.

git log main..feature

4. Công thức "bỏ túi": Các tình huống thực tế 🚀

Hãy kết hợp các lệnh trên để giải quyết những bài toán thường gặp.

  • Công thức 1: Xem lịch sử của một file, kèm theo bản vá (patch)

    git log -p --follow -- <tên-file>
    

    -p sẽ hiển thị chi tiết thay đổi (diff) của từng commit. --follow giúp truy vết lịch sử file ngay cả khi nó bị đổi tên.

  • Công thức 2: Xem ai là người sửa một dòng code cụ thể Mặc dù git blame làm việc này tốt hơn, git log cũng có thể cung cấp thông tin hữu ích.

    git log -S "đoạn code bạn tìm" --source --all
    

    -S tìm kiếm các commit có thêm hoặc bớt một chuỗi ký tự.

  • Công thức 3: Tạo "bí danh" (alias) cho lệnh log yêu thích Gõ đi gõ lại một lệnh dài thật mệt mỏi. Hãy tạo một alias trong Git!

    git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --abbrev-commit"
    

    Từ giờ, bạn chỉ cần gõ git lg là sẽ có một output đẹp lung linh!

Kết luận: Git log không chỉ là một câu lệnh

git log không chỉ là một lệnh để xem lại lịch sử. Nó là một công cụ chẩn đoán, một trợ lý phân tích về dự án của bạn. Bằng cách kết hợp các tùy chọn định dạng, lọc và tìm kiếm, bạn có thể nhanh chóng tìm thấy chính xác thông tin mình cần.

Đừng ngại thử nghiệm với các tham số khác nhau. Càng thực hành nhiều, bạn sẽ càng thấy git log hữu ích và mạnh mẽ đến nhường nào.

Chúc bạn thành công trên hành trình làm chủ Git!

Bài viết liên quan

[Git cơ bản] Git là gì? Khám phá vai trò của Git trong lập trình

Git là hệ thống quản lý phiên bản cực kỳ phổ biến. Bài viết này sẽ giải thích Git là gì, tại sao mọi developer đều cần biết Git và các bước để bắt đầu sử dụng.

[Git cơ bản] Hiểu đúng về vòng đời file trong Git: 3 trạng thái bạn cần biết

Vòng đời của một file trong Git không hề phức tạp như bạn nghĩ. Bài viết này sẽ giúp bạn nắm vững 3 trạng thái chính và cách chúng hoạt động để quản lý source code hiệu quả hơn.

[Git cơ bản] Cài đặt Git và Cấu hình ban đầu: Những điều bạn cần biết

Bắt đầu với Git chưa bao giờ dễ dàng đến thế! Hướng dẫn chi tiết cách cài đặt và cấu hình Git ban đầu, giúp bạn thiết lập môi trường làm việc hiệu quả chỉ trong vài phút.

[Git cơ bản] Tệp tin .gitignore là gì? Cách sử dụng hiệu quả cho mọi dự án

Học cách sử dụng tệp tin .gitignore để bỏ qua các file tạm, file log, và các thư mục không cần thiết. Đơn giản hóa dự án và giữ cho Git repository của bạn luôn sạch sẽ.