Git workflow với Claude Code: tự động commit & mở PR (2026)
Claude Code có làm được git workflow gần như trọn vẹn: tự đọc diff rồi viết commit chuẩn conventional, tách một mớ thay đổi hỗn hợp thành nhiều commit gọn, quét secret trước khi commit, và mở pull request bằng gh - bạn chỉ ra lệnh bằng lời. Bốn bước lõi: (1) chuẩn bị git + gh auth login; (2) "commit theo conventional commits"; (3) "tách thành các commit atomic theo type/scope"; (4) "create a pr". Bài này hướng dẫn từng bước, kèm template CLAUDE.md và slash command /commit copy-paste được.
Claude Code có tự tạo commit & PR không?
Có - và đó là tính năng gốc, không cần cài thêm gì. Claude Code gọi git và gh qua Bash tool, nên bạn chỉ cần nói "commit các thay đổi" là nó tự chạy git status, git diff, đọc bối cảnh, rồi soạn commit message; nói "create a pr" là nó tự chạy gh pr create và tự sinh title + body dựa trên các commit.
Điều kiện tối thiểu: repo đã git init và bạn đang ở trong đó. Muốn tạo PR thì cần gh CLI (GitHub CLI) đã đăng nhập - nếu chưa có, Claude Code vẫn commit được bình thường, chỉ là bước mở PR sẽ thiếu công cụ. Theo tài liệu common workflows của Anthropic (truy cập 09/08/2026), đây là các luồng được hỗ trợ chính thức, không phải mẹo bên thứ ba.
Một lưu ý về niềm tin ngay từ đầu: Claude Code thao tác git qua permission của Bash tool, nên mỗi lệnh ghi (commit, push) sẽ hỏi bạn duyệt trừ khi bạn đã cấp quyền. Nó không tự push lên remote nếu bạn không yêu cầu - nhưng như phần cuối bài sẽ nói, bạn nên đặt luật rõ trong CLAUDE.md để chắc chắn.
Bước 1 - Chuẩn bị: git, gh CLI & xác thực
Trước khi giao git cho agent, kiểm tra ba thứ. Mở terminal (hoặc để Claude Code tự chạy) và xác nhận:
git --version
gh --version
gh auth status
Nếu gh báo chưa cài, cài GitHub CLI rồi đăng nhập một lần:
# macOS
brew install gh
# Windows
winget install --id GitHub.cli
# Sau khi cài, đăng nhập (mở trình duyệt xác thực)
gh auth login
Chọn GitHub.com → HTTPS → xác thực qua trình duyệt. Xong bước này, gh có token để tạo PR thay bạn. Cuối cùng, đảm bảo bạn đang ở đúng repo và nhánh làm việc:
git rev-parse --is-inside-work-tree # true nếu đúng là repo git
git branch --show-current
Mẹo: đừng làm việc trực tiếp trên main. Tạo nhánh trước - bạn có thể nhờ luôn Claude Code: "tạo nhánh feat/thanh-toan rồi chuyển sang nhánh đó". Giữ nhánh sạch giúp bước mở PR ở cuối gọn hơn nhiều.
Bước 2 - Tự động viết commit chuẩn conventional
Đây là phần Claude Code tỏa sáng. Sau khi code xong, thay vì tự gõ message, ra lệnh:
commit các thay đổi hiện tại theo chuẩn conventional commits
Claude Code sẽ chạy git status + git diff --staged (và diff chưa stage), phân tích thực sự bạn đã đổi gì, rồi viết message đúng format:
type(scope): mô tả ngắn gọn ở thì hiện tại
- gạch đầu dòng chi tiết nếu cần
- lý do thay đổi, không chỉ liệt kê file
Các type phổ biến của Conventional Commits:
type | Dùng khi | Ví dụ |
|---|---|---|
feat | Thêm tính năng mới | feat(auth): thêm đăng nhập Google |
fix | Sửa bug | fix(cart): tính sai tổng khi có mã giảm giá |
docs | Chỉ sửa tài liệu | docs(readme): bổ sung hướng dẫn cài đặt |
refactor | Đổi code không đổi hành vi | refactor(api): tách handler ra module riêng |
chore | Việc lặt vặt, cấu hình, deps | chore(deps): nâng eslint lên v9 |
test | Thêm/sửa test | test(cart): thêm case mã giảm giá hết hạn |
Mẹo để message chất lượng hơn: nếu bạn đã stage sẵn đúng phần muốn commit (git add có chủ đích), Claude Code sẽ bám sát diff staged và ít "đoán" hơn. Bạn cũng có thể yêu cầu cụ thể: "commit, scope là 'checkout', nhấn vào lý do đổi chứ đừng liệt kê file". Càng cho nó ngữ cảnh về vì sao thay đổi, message càng có giá trị lâu dài cho người đọc lịch sử sau này.
Về dòng "Co-Authored-By": mặc định Claude Code thường thêm attribution kiểu Co-Authored-By: Claude <...> vào cuối commit. Với repo cá nhân/side project thì giữ cũng vô hại và minh bạch. Nhưng với repo công ty có quy ước commit chặt (hoặc CI kiểm định dạng message bằng commitlint), bạn có thể muốn tắt. Cách đơn giản nhất là đặt luật trong CLAUDE.md: "không thêm dòng Co-Authored-By hay bất kỳ chữ ký AI nào vào commit message" - Claude Code sẽ tuân theo. Đây là quyết định theo chính sách repo, nên thống nhất với team trước khi bật hay tắt đại trà. Nếu bạn tham khảo nhanh các lệnh git hay dùng với Claude Code, cheat sheet Claude Code có bảng tổng hợp tiện tra cứu.
Bước 3 - Tách commit theo type/scope (auto-split)
Thực tế bạn hiếm khi chỉ sửa một thứ. Một phiên code có thể vừa thêm tính năng, vừa sửa bug, vừa cập nhật docs - nhét hết vào một commit khổng lồ thì reviewer khóc, mà revert thì kéo theo cả những thay đổi không liên quan. Claude Code có thể tự tách:
các thay đổi này gồm nhiều loại. Hãy tách thành các commit atomic
riêng theo type/scope, mỗi commit chỉ chứa một loại thay đổi
Nó sẽ nhóm diff theo chủ đề, stage từng nhóm (git add -p hoặc theo file), rồi tạo lần lượt. Ví dụ một diff hỗn hợp có thể thành:
feat(payment): thêm luồng thanh toán VietQR
fix(payment): sửa lỗi làm tròn số tiền
docs(payment): ghi chú biến môi trường SEPAY_KEY
Vì sao đáng làm: mỗi commit atomic là một đơn vị review độc lập, dễ đọc lịch sử, và khi cần git revert bạn chỉ gỡ đúng thứ hỏng mà không đụng phần còn lại. Đây là kỹ thuật gần như không hướng dẫn nào nhắc tới, nhưng lại là khác biệt lớn giữa "để AI commit đại" và "để AI commit như một dev cẩn thận". Lưu ý: hãy đọc lướt các commit nó đề xuất trước khi duyệt - thỉnh thoảng ranh giới scope nó chia chưa khớp cấu trúc module của bạn, khi đó chỉ cần nói "gộp hai commit đầu lại".
Bước 4 - Quét secret trước khi commit
Đây là rủi ro thật khi để agent tự commit mà gần như không hướng dẫn nào đề cập: agent có thể vô tình đưa .env, khóa API, token, hay chuỗi kết nối database vào commit - và một khi đã vào history thì rất phiền để xóa sạch. Trước khi commit, hãy yêu cầu quét:
trước khi commit, quét các file staged xem có secret nào không:
API key, token, mật khẩu, chuỗi kết nối, hay file .env bị lỡ thêm
Checklist an toàn nên áp dụng:
- Có
.gitignorechặn.env,*.pem,*.keyngay từ đầu repo. - Yêu cầu Claude Code kiểm tra diff staged tìm chuỗi giống khóa/token trước mỗi commit.
- Cài một pre-commit hook chặn ở tầng git (ví dụ gitleaks hoặc git-secrets) để không phụ thuộc hoàn toàn vào agent.
- Nếu đã lỡ commit secret: coi như token đó đã lộ - xoay (rotate) ngay, đừng chỉ xóa file rồi commit đè.
Muốn tự động hóa hẳn phần này, bạn có thể cho việc quét vào một hook chạy trước commit - xem thêm cách dùng hook trong Claude Code để gắn kiểm tra tự động. Nguyên tắc vàng: đừng bao giờ tin tưởng tuyệt đối một agent với quyền ghi history mà không có lớp chặn ở tầng git.
Bước 5 - Mở pull request tự động bằng gh
Khi các commit đã sạch, mở PR chỉ là một câu:
create a pr
Claude Code sẽ push nhánh (nếu bạn cho phép), chạy gh pr create, và tự soạn title + body dựa trên các commit trong nhánh - kèm phần tóm tắt thay đổi và checklist nếu repo có template PR. Bạn có thể yêu cầu cụ thể hơn: "mở PR vào nhánh develop, ghi rõ phần test đã chạy".
Mẹo hay từ Anthropic docs: PR được tạo bằng gh pr create sẽ tự liên kết với phiên Claude Code đã tạo ra nó. Sau này khi review lại, bạn mở lại đúng ngữ cảnh phiên đó bằng:
claude --from-pr 1234
Rất tiện khi reviewer trả comment và bạn muốn Claude Code sửa tiếp mà vẫn nhớ toàn bộ bối cảnh ban đầu.
Nếu bạn cần thao tác GitHub sâu hơn ở bước này - đọc issue, comment, quản lý review request ngay trong phiên - hãy kết hợp GitHub MCP với Claude Code thay vì chỉ dựa vào gh. MCP cho Claude Code "nhìn" được toàn bộ ngữ cảnh GitHub, không chỉ chạy lệnh CLI.
Chuẩn hoá bằng CLAUDE.md & slash command /commit
Ra lệnh bằng lời rất nhanh, nhưng nếu mỗi lần bạn phải nhắc lại "conventional commits, đừng push, đừng thêm chữ ký AI" thì nên đưa thành luật cố định. Đặt block sau vào file CLAUDE.md ở gốc repo - Claude Code đọc nó mỗi phiên:
## Quy tắc Git
- Commit theo Conventional Commits: type(scope): mô tả (thì hiện tại).
- Type dùng: feat, fix, docs, refactor, chore, test.
- Tách diff hỗn hợp thành các commit atomic theo type/scope.
- Quét secret (API key, token, .env) trước mỗi commit.
- KHÔNG tự chạy git push; chỉ push khi tôi yêu cầu rõ.
- KHÔNG thêm dòng Co-Authored-By hay chữ ký AI vào commit message.
- Scope theo tên module/thư mục của repo.
Muốn hiểu sâu hơn cách viết file này, xem hướng dẫn viết luật git trong CLAUDE.md. Bước tiếp theo là gói cả quy trình vào một slash command tùy chỉnh để cả team gõ một lệnh là chạy đúng chuẩn. Tạo file .claude/commands/commit.md:
---
description: Commit theo conventional, tách atomic, quét secret
---
Xem git status và git diff. Quét secret trong file staged.
Tách các thay đổi thành commit atomic theo type/scope.
Commit theo Conventional Commits. KHÔNG push.
Từ đó, cả nhóm chỉ cần gõ /commit là có cùng một hành vi - không ai commit lệch chuẩn nữa. Đây chính là cách biến "mẹo cá nhân" thành "tiêu chuẩn team".
Quy trình nâng cao: worktree, review PR & CI
Khi đã quen, có vài kỹ thuật đẩy năng suất lên tầm khác:
Worktree song song. Muốn Claude Code làm một tính năng trên nhánh riêng mà không đụng thư mục làm việc chính, dùng worktree:
claude --worktree feature-auth
Bạn có thể để một phiên fix bug và một phiên làm feature chạy song song trên hai worktree, không giẫm chân nhau.
Pipe vào pre-commit/CI. Claude Code chạy được ở chế độ không tương tác qua -p, nên có thể nhét vào script. Ví dụ tóm tắt các commit gần đây cho changelog hay khâu review:
git log --oneline -20 | claude -p "tóm tắt các commit gần đây thành changelog"
Stacked PR. Khi một tính năng lớn chia thành nhiều PR phụ thuộc nhau (PR B dựa trên PR A chưa merge), bạn có thể nhờ Claude Code dựng chuỗi nhánh xếp chồng và mở PR theo đúng thứ tự cha-con. Cách này giúp reviewer duyệt từng phần nhỏ thay vì một PR khổng lồ, và là chỗ một skill git dựng sẵn tiết kiệm nhiều thao tác lặp.
Tự review PR trước khi merge. Trước khi bấm merge, để Claude Code đọc diff và soi lỗi logic, edge case, hay lỗ hổng - xem cách để Claude review PR trước khi merge. Kết hợp với CI của repo, bạn có hai lớp kiểm tra: máy chạy test, AI soi ý nghĩa thay đổi. Lưu ý giữ vai trò rạch ròi: để agent review sơ bộ tốt, nhưng quyết định merge cuối cùng vẫn nên có mắt người, nhất là với thay đổi chạm tới bảo mật hay dữ liệu.
Tăng tốc git bằng skill dựng sẵn (ak-git của AgentKit)
Cả bài này về cơ bản là dạy bạn tự dựng: viết prompt, đặt luật CLAUDE.md, tạo slash command. Cách đó hoàn toàn ổn và miễn phí. Nhưng nếu không muốn tự lắp từng mảnh, có một skill git dựng sẵn tên ak-git làm đúng bốn mảnh trong bài - conventional commit, auto-split theo type/scope, quét secret, và cả stacked PR - chỉ với một lệnh gọi.
Một dòng phân biệt:
ak-gitnằm trong AgentKit - bộ kit cho Claude Code tại agentkit.best (CLIak), khác với "AgentKit" của OpenAI. Đừng nhầm hai thứ.
ak-git đến từ Engineer Kit ($99, trang không nêu phí định kỳ) - nếu muốn biết trong đó còn gì, đọc bài review Engineer Kit trước khi quyết định. Điểm thành thật: bạn không bắt buộc phải mua để làm git workflow - mọi thứ trong bài này chạy được với Claude Code trần. Giá trị của kit là tiết kiệm công dựng và giữ hành vi nhất quán cho cả team.
Không muốn tự dựng prompt và slash command? ak-git gói sẵn conventional commit, auto-split và quét secret trong một skill - dùng ngay trong Claude Code.
Lỗi thường gặp & mẹo an toàn
Để agent làm git rất tiện, nhưng có vài cái bẫy quen thuộc. Đây là những gì hay hỏng và cách xử lý:
| Lỗi | Cách xử lý |
|---|---|
| Commit "quá to", gộp nhiều loại thay đổi | Yêu cầu tách atomic (Bước 3), hoặc đặt luật auto-split trong CLAUDE.md |
Claude tự git push ngoài ý muốn | Thêm luật "KHÔNG tự push" trong CLAUDE.md; không cấp sẵn quyền cho lệnh push |
| Message sai scope (đặt tên module không khớp) | Ghi rõ quy ước scope theo thư mục trong CLAUDE.md; sửa nhanh bằng "đổi scope thành ..." |
| Xung đột khi rebase | Nhờ Claude giải thích từng conflict rồi tự resolve, nhưng bạn duyệt kết quả cuối |
| Tắt attribution sai chỗ / không nhất quán | Quyết định một lần ở cấp repo (CLAUDE.md), đừng để mỗi phiên mỗi kiểu |
| Lỡ commit secret | Rotate token ngay; xóa file không đủ vì vẫn còn trong history |
Giới hạn thành thật cần nhớ: Claude Code không "hiểu" business logic sâu như bạn, nên message nó viết đôi khi mô tả cái gì thay đổi tốt hơn vì sao. Với commit quan trọng, hãy tự bổ sung phần "why". Và luôn xem lại diff trước khi duyệt - agent nhanh, nhưng trách nhiệm với history vẫn là của bạn.
Câu hỏi thường gặp (FAQ)
Claude Code có tự push lên remote không?
Không, trừ khi bạn yêu cầu. Mọi lệnh git ghi đều qua permission của Bash tool và Claude Code không tự push nếu bạn không nói. Để chắc chắn, thêm luật "KHÔNG tự git push" vào CLAUDE.md.
Có bắt buộc cài gh CLI không?
Không bắt buộc để commit - git là đủ. Nhưng để Claude Code tự mở pull request bằng gh pr create thì cần gh đã cài và đăng nhập qua gh auth login.
Commit có kèm dòng "Generated with Claude" không, tắt thế nào?
Mặc định thường có dòng Co-Authored-By ghi nhận Claude. Muốn tắt, thêm luật vào CLAUDE.md: "không thêm dòng Co-Authored-By hay chữ ký AI vào commit message". Claude Code sẽ bỏ.
Làm sao để Claude tách một mớ thay đổi thành nhiều commit?
Ra lệnh "tách các thay đổi này thành commit atomic theo type/scope". Claude Code sẽ nhóm diff theo chủ đề, stage từng nhóm rồi tạo commit riêng cho từng loại thay đổi.
Mở pull request riêng tư (draft) được không?
Được. Nói rõ "tạo PR ở dạng draft" và Claude Code sẽ thêm cờ tương ứng khi chạy gh pr create. Bạn cũng có thể chỉ định nhánh đích và reviewer.
Dùng được với GitLab hay Bitbucket không?
Phần commit conventional, tách commit và quét secret hoạt động với mọi repo git. Riêng bước mở PR tự động dựa trên gh nên gắn với GitHub; với GitLab/Bitbucket bạn dùng CLI tương ứng (như glab) hoặc thao tác thủ công.
Kết luận & bước tiếp theo
Git workflow với Claude Code gói lại thành bốn bước: chuẩn bị git + gh, commit chuẩn conventional, tách commit atomic và quét secret, rồi mở PR bằng gh. Đưa quy tắc vào CLAUDE.md và một slash command /commit là cả team có cùng một chuẩn. Bước tiếp: gắn GitHub MCP cho thao tác GitHub sâu hơn, và để Claude review PR trước khi merge. Nếu muốn bỏ qua phần tự dựng, bộ kit AgentKit (giảm 20% qua link) có sẵn skill ak-git làm đúng quy trình trên.