Back to blog

Git Log Là Mỏ Vàng Context Cho AI

gitaideveloper-toolssoftware-engineeringworkflow
Git Log Là Mỏ Vàng Context Cho AI

Đây là workflow mà phần lớn developer đang làm: viết xong code, stage file, gõ git commit -m "fix bug", rồi tiếp tục. Commit message là thứ phụ — cái nhãn dán vội lên gói hàng trước khi gửi đi.

Thói quen đó có cái giá mà nó cứ âm thầm cộng dồn theo thời gian.


Vấn Đề Với Commit Message Cẩu Thả

Khi bạn gõ git commit -m "refactor auth", bạn biết mình vừa thay đổi gì. Nhưng message đó không capture được tại sao. Một tuần sau, khi có gì đó break trong auth, bạn (hoặc teammate, hoặc AI assistant) git log lên và thấy:

fix bug
refactor auth
update config
add tests
fix again

Đó không phải là history. Đó là noise. Nó cho bạn biết khi nào mọi thứ xảy ra nhưng không nói gì về tại sao chúng xảy ra, những trade-off nào đã được đưa ra, hay những architectural decision nào được encode trong change đó.

Và khi AI coding tool ngày càng chiếm phần lớn hơn trong workflow, vấn đề này càng trầm trọng hơn — vì commit history là một trong những nguồn context phong phú nhất mà bạn có thể cung cấp cho AI.


Context Tốt Trông Như Thế Nào

Trước khi commit, chạy git diff --staged và paste diff đó vào AI tool bạn đang dùng. Rồi hỏi:

"Viết commit message mô tả thay đổi là gì, tại sao thay đổi, và bất kỳ architectural decision hay constraint nào được encode trong change này."

Sự khác biệt trong output rất rõ rệt. Thay vì:

refactor auth middleware

Bạn sẽ nhận được:

refactor: extract token validation into standalone middleware
 
Previously, token validation was embedded in each route handler.
Extracted to middleware to ensure consistent enforcement across all
protected routes and reduce the surface area for auth bypass bugs.
 
Constraint: middleware must run before rate limiting — rate limiter
assumes an authenticated user ID is present in request context.

Message thứ hai là một mini design document. Nó giải thích change, lý do, và một contract mà code tương lai phải tuân theo.


Tại Sao Điều Này Cộng Dồn Theo Thời Gian

Commit message tốt không chỉ là documentation cho con người — chúng là structured context cho AI tool.

Khi sau này bạn nhờ AI assistant giúp debug, refactor, hay thêm feature mới, bạn có thể làm thế này:

git log --oneline -20

Paste những message đó vào. Lúc này AI hiểu được:

  • Những decision nào vừa được đưa ra gần đây
  • Những constraint nào được encode trong codebase
  • Architecture đang đi theo hướng nào

Không có context đó, AI chỉ đang đoán mò. Có nó, AI có thể reasoning về codebase cụ thể của bạn, không phải một phiên bản generic nào đó.

Đây là compound effect: mỗi commit được viết tốt làm cho công việc AI-assisted trong tương lai chính xác hơn. Mỗi commit cẩu thả làm nó kém chính xác hơn.


Vấn Đề Architecture Drift

Còn một lợi ích tinh tế hơn: ngăn architecture drift.

Architecture drift xảy ra khi những thay đổi riêng lẻ, mỗi cái đều hợp lý khi nhìn riêng, dần dần kéo codebase theo những hướng không nhất quán. Một module được thiết kế để stateless bắt đầu tích lũy state. Một service boundary vốn phải chặt chẽ bắt đầu bị bypass. Không có thay đổi đơn lẻ nào gây ra vấn đề — drift xảy ra trong những khoảng trống giữa các decision.

Commit message tốt làm những vi phạm này trở nên visible. Khi AI tool của bạn thấy:

refactor: make UserService stateless — all state moves to Redis
 
Constraint: UserService methods must not maintain instance state.
This enables horizontal scaling without sticky sessions.

Rồi sau đó thấy một diff thêm instance variable vào UserService, nó có thể flag sự không nhất quán đó. Message đã encode một architectural contract. Các change tương lai có thể được kiểm tra đối chiếu với nó.

Không có message đó, constraint chỉ tồn tại trong đầu ai đó. Mà đầu người thì hay quên.


Workflow Thực Tế

Cái này không cần phức tạp. Đây là phiên bản đơn giản:

Trước khi commit:

git diff --staged

Paste output vào AI tool và yêu cầu viết commit message bao gồm:

  1. Thay đổi là gì (ngắn gọn)
  2. Tại sao thay đổi
  3. Bất kỳ constraint hay contract nào được encode trong change này

Review lại. AI không biết hết mọi thứ về codebase của bạn. Sửa cho chính xác. Nhưng để nó làm phần draft — đó là phần thường bị bỏ qua khi bạn đang vội.

Commit với message đầy đủ. Không chỉ subject line — dùng cả phần body. Git hỗ trợ multi-line message vì có lý do.

git commit -m "$(cat <<'EOF'
refactor: extract token validation into standalone middleware
 
Previously embedded in each route handler. Now centralized to ensure
consistent enforcement and reduce auth bypass surface area.
 
Constraint: must run before rate limiter — assumes authenticated user
ID is in request context.
EOF
)"

Không Chỉ Cho Cá Nhân

Nếu bạn làm việc trong một team, practice này có multiplier effect. Khi mọi người đều viết commit message theo cách này, thành viên mới có thể git log để hiểu architecture. Code review trở nên dễ hơn vì PR description đã được viết một nửa rồi. Và việc onboard AI assistant vào project đồng nghĩa với việc cung cấp cho nó một log đầy context thực sự, không chỉ là danh sách file thay đổi.

Investment nhỏ — khoảng 30 giây mỗi commit. Return cộng dồn mỗi khi ai đó, người hay AI, cần hiểu tại sao code lại như vậy.


Kết Lại

Git log của bạn là context. Hiện tại, phần lớn nó có lẽ đang bị lãng phí — những cái nhãn ghi lại khi nào mà không capture tại sao.

Dùng AI để viết commit message tốt hơn không chỉ làm history của bạn dễ đọc hơn. Nó làm history hữu ích hơn — như documentation, như architecture record, và như context giúp mọi tương tác AI trong tương lai chính xác hơn.

Viết commit giải thích các decision. Bản thân tương lai sẽ cảm ơn bạn. Và AI đang cố giúp bản thân tương lai đó cũng vậy.

📬 Đăng ký nhận bản tin

Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.

💬 Comments

Đăng nhập để bình luận

Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.