Nghệ Thuật "Đọc Dấu Vết" Với Git Log: Khám Nghiệm Hiện Trường Dự Án
Chắc hẳn bạn từng rơi vào cảnh: Sáng thứ Hai đẹp trời, pull code mới nhất về và dự án báo lỗi build. Không biết đoạn code lỗi này từ đâu ra, do ai viết, và viết với mục đích gì. Lúc này, thay vì đi hỏi từng người trong team, vũ khí của bạn chính là git log.
Nhưng nếu chỉ gõ git log enter, thứ bạn nhận được là một màn hình terminal toàn chữ là chữ, cuộn mỏi tay không hết. Hôm nay, mình sẽ chỉ cho anh em cách "ép" Git phải nhả ra những thông tin giá trị nhất một cách gọn gàng và đẹp mắt.
1. Cấp độ 1: Rút gọn lịch sử (The One-liner)
Lệnh git log mặc định hiển thị quá thừa thãi (mã hash dài 40 ký tự, tác giả, ngày tháng, nội dung). Trong 90% trường hợp, thứ chúng ta cần nhìn nhanh là: Mã commit ngắn + Lời nhắn.
Cách làm: Thêm cờ --oneline.
git log --oneline
Ví dụ Output:
a1b2c3d (HEAD -> main, origin/main) feat: add Select2 with AJAX
8f9e0d1 fix: resolve OOM issue on production
4c5b6a7 docs: update README tech spec
Cực kỳ gọn gàng! Bạn có thể nhìn thấy ngay hàng chục commit trên một màn hình thay vì chỉ 2-3 commit như mặc định.
2. Cấp độ 2: Bật "Mắt thần" nhìn thấu các nhánh (The Graph)
Khi dự án có nhiều nhánh (nhánh main, nhánh feature/auth, nhánh hotfix/bug-login), việc chỉ nhìn danh sách phẳng sẽ không cho bạn thấy bức tranh tổng thể. Nhánh nào vừa được merge? Nhánh nào đang bị rẽ ngang?
Cách làm: Kết hợp combo thần thánh --graph --oneline --all --decorate.
git log --graph --oneline --all --decorate
--graph: Vẽ sơ đồ cây bằng các ký tự ASCII (*, |, /, ).--all: Hiển thị lịch sử của TẤT CẢ các nhánh, không chỉ nhánh hiện tại.--decorate: Hiển thị rõ tên nhánh (branch tag) bên cạnh commit.
Ví dụ Output:
* a1b2c3d (HEAD -> main) Merge pull request #42 from feature/select2
|\
| * 8f9e0d1 (feature/select2) feat: add Select2 with AJAX
| * 7e8d9c0 fix: update debounce logic
* | 4c5b6a7 hotfix: resolve database deadlock
|/
* 1a2b3c4 Init project
Nhìn vào đây, bạn thấy ngay nhánh feature/select2 được rẽ ra từ lúc nào và gộp vào main ra sao.
3. Cấp độ 3: Lọc log như một thám tử (The Filter)
Đôi khi bạn không muốn xem toàn bộ lịch sử, bạn chỉ muốn tìm đúng người, đúng thời điểm, hoặc đúng từ khóa.
- Tìm tội đồ (Lọc theo Tác giả):
git log --author="Hoang" --oneline
(Git sẽ chỉ hiển thị các commit do Hoang viết).
- Lọc theo thời gian (Tìm bug cuối tuần):
git log --since="last Friday" --until="today" --oneline
- Tìm kiếm theo nội dung tin nhắn (Grep):
Bạn nhớ mang máng có một commit sửa lỗi "OOM" nhưng không nhớ lúc nào?
git log --grep="OOM" --oneline
4. Cấp độ 4: Soi tận răng - Commit này thực sự sửa dòng code nào? (The Patch)
Biết được commit name là chưa đủ. Bạn muốn xem luôn chi tiết code (diff) ngay trong log mà không cần mở Github/Gitlab lên?
Cách làm: Thêm cờ -p (patch).
git log -p -2
(Lệnh này hiển thị chi tiết thay đổi code của 2 commit gần nhất).
Ví dụ Output:
commit 8f9e0d1...
Author: Hoang
Date: Mon Apr 13 12:00:00 2026 +0700
fix: resolve OOM issue on production
diff --git a/worker.go b/worker.go
--- a/worker.go
+++ b/worker.go
@@ -10,7 +10,7 @@
- go process(msg)
+ pool.Submit(func() { process(msg) })
Boom! Bạn thấy ngay file worker.go đã bị xóa dòng go process(msg) màu đỏ và thêm vào dòng giới hạn worker pool màu xanh.
5. Lời kết: Custom Alias - Vibe Coder lười biếng
Gõ cái combo --graph --oneline --all --decorate mỗi ngày thì gãy tay mất. Vibe Coder thực thụ sẽ tạo một Alias (phím tắt) cho nó.
Chạy lệnh này 1 lần duy nhất trong Terminal:
git config --global alias.tree "log --graph --oneline --all --decorate"
Từ nay về sau, bạn chỉ cần gõ:
git tree
Và tận hưởng cái "vibe" ngắm nhìn cái cây commit đẹp đẽ của mình!
Chủ đề tiếp theo: Git Bisect - Chú Chó Săn Tìm Bug Tự Động
Biết dùng git log là bạn đã có thể tự tìm lỗi. Nhưng nếu dự án có 500 commits được push trong tuần qua, và tự nhiên hôm nay app bị crash trắng màn hình? Bạn không biết chính xác commit nào trong 500 cái đó gây ra lỗi. Bạn định checkout từng cái một để test ư? Mất cả ngày!
Ở bài viết tới, mình sẽ giới thiệu một ma thuật đen của Git: git bisect. Đây là công cụ áp dụng thuật toán "Tìm kiếm nhị phân" (Binary Search) giúp bạn khoanh vùng và bắt quả tang chính xác commit gây lỗi chỉ trong vòng... 5-7 bước test, tự động hoàn toàn. Cùng đón đọc cách thả chó săn đi tìm bug nhé!
All rights reserved