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.
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!