Giải thích cho người mới · 10/2026

Git cho
người dùng agent

Agent sửa nhanh và sai cũng nhanh. Hãy cho mỗi việc một nhánh, commit nhỏ như điểm lưu, và biết cách quay lại.

Ví dụ đời thường Lệnh chạy thật Câu mẫu Danh sách kiểm
git commit -m Đã lưu chưa?
Câu hỏi của bài này

Agent sai nhanh, nên cần điểm lưu

1Agent sửa mười tệp trước khi bạn đọc xong tệp đầu. Một lần sai có thể nuốt cả buổi làm việc.
2Git là điểm lưu. Nó chỉ nhớ những gì bạn đã commit, không nhớ gì hơn.
3Điểm lưu làm cái sai bớt đắt. Chưa ai hiểu hết vì sao agent sai, nên các hình ảnh trong bài chỉ để dễ nhớ.
Hình dung trước

Trò chơi dài có điểm lưu

Không lưu

Chơi cả giờ không lưu

Chết một lần là mất cả giờ chơi.

Lưu thường xuyên

Lưu mỗi vài phút

Chết thì chỉ mất vài phút. Dám thử hơn.

Giao việc cho agent cũng vậy: mỗi commit nhỏ là một lần bấm lưu game.
Từ khó, nói dễ

Sáu từ sẽ gặp trong bài

Commit

nghĩa: điểm lưu

Một lần lưu có tên và ghi chú. Ai cũng quay lại được chỗ đó.

Nhánh

tên kỹ thuật: branch

Đường chơi riêng tách khỏi bản chính, để thử mà không làm hỏng bản chính.

Bản so sánh

tên kỹ thuật: diff

Danh sách chính xác dòng nào thêm, dòng nào xóa so với lần lưu trước.

Revert

nghĩa: hoàn tác bằng điểm lưu mới

Tạo điểm lưu mới làm ngược lại điểm lưu cũ. Lịch sử vẫn còn nguyên.

Reflog

nghĩa: nhật ký di chuyển

Cuốn sổ ghi chỗ con trỏ HEAD từng đứng. Dùng để tìm điểm lưu tưởng đã mất.

Worktree

nghĩa: thư mục làm việc thêm

Một bàn làm việc thứ hai của cùng một kho, đang đứng ở nhánh khác.

Quy trình

Mỗi việc một nhánh: năm bước

1Tạo nhánh riênggit switch -c agent/add-discount
2Giao việcAgent làm trên nhánh, không đụng vào main
3Đọc status và diffTrước khi nhận, xem tệp nào đổi và đổi gì
4Commit nhỏMỗi commit một việc, như một điểm lưu
5Bạn gộp vào mainChỉ gộp thứ bạn đã đọc
Bước 3 chạy thật

Đọc diff trước khi nhận

## agent/add-discount
M prices.py
-def total(items):
- return sum(price * qty)
+def total(items, discount=0):
+ subtotal = sum(price * qty)
+ return subtotal * (1 - discount)

M là tệp bị sửa. Dòng - bị xóa, dòng + là mới.

Đọc diff chính là bước mở bằng chứng ra. Đoạn code rút gọn để vừa khung.

Ví dụ tính được

Tính thử: commit mỗi 20 phút

session = 180 (phút)
every = 20
saves = 180 // 20 9
worst = every 20
kept = 180 - 20 160

Minh họa: 20 phút là giả định của tôi, không phải số đo.

Không lưu lần nào: mất tối đa 180 phút.

Lưu mỗi 20 phút: 9 điểm lưu, mất tối đa 20 phút, giữ lại 160.

Quay lại

Chọn đúng lệnh cho đúng hoàn cảnh

Hoàn cảnhLệnhRủi ro
Chưa commit, agent sửa saigit restoreMất thật
Commit đã có mà saigit revertAn toàn
Đang làm dở, cần tay trốnggit stashAn toàn
Lỡ tay reset --hardgit reflogCứu commit, không cứu phần chưa commit
Chạy thật 1

git restore: chưa commit là mất thật

$ git restore prices.py
$ git reflog | head -2
5aee66b HEAD@{0}: reset
5aee66b HEAD@{1}: reset
$ git stash list | wc -l
0

Tệp về bản đã commit. Phần bị hủy không có dòng nào trong reflog, và stash trống.

Muốn giữ thì stash hoặc commit trước.

Chạy thật 2

git revert: đảo lại mà giữ lịch sử

$ git revert --no-edit HEAD
c5b6fbf Revert "refactor: simplify total"
6f88dd0 refactor: simplify total
c9c7cf3 feat: add optional discount
6dd4973 feat: add total function

Commit hỏng vẫn nằm trong lịch sử. Một commit mới đảo lại nó.

Không viết lại lịch sử, nên an toàn với nhánh dùng chung.

Chạy thật 3

Lỡ reset: reflog còn nhớ

$ git reset --hard HEAD~2
$ git reflog
6f88dd0 HEAD@{0}: reset
5aee66b HEAD@{1}: commit: extra
$ git reset --hard HEAD@{1}
HEAD is now at 5aee66b

Điểm lưu 5aee66b vẫn ở đó. Đặt lại về nó, mọi thứ trở lại.

Theo tài liệu Git, mục reflog giữ 90 ngày, hoặc 30 ngày nếu không còn nằm trên nhánh. Chỉ có trên máy bạn.

Chạy thật 4

Worktree: bàn làm việc riêng cho agent

$ git worktree add ../wt -b agent/refactor
Preparing worktree (new branch)
$ git worktree list
/path/to/demo 5aee66b [agent/add-discount]
/path/to/wt 5aee66b [agent/refactor]

Như hai quầy trong một bếp: cùng kho, không đụng tay nhau.

Mặc định Git không cho hai nơi cùng một nhánh. Claude Code có sẵn claude --worktree.

Luật chơi

Luật Git cho agent: năm dòng

1Không commit thẳng vào mainNhánh agent/tên-việc cho mỗi việc
2Commit nhỏ, kiểm trước khi commitMỗi commit một việc
3Không push --force, reset --hard, cleanHoặc xóa nhánh, khi chưa hỏi
4Không push, không sửa .envDùng .gitignore chặn tệp chứa khóa
5Cuối việc dán status và diffgit status và git diff --stat
Trong công việc

Có điểm lưu vẫn có chỗ hỏng

1Phần chưa commit bị restore hoặc reset --hardCommit hoặc stash trước, commit thường xuyên
2Agent chạy git cleanTệp chưa theo dõi không có bản sao, nên cấm
3Agent push, nhất là --forceKhông cho push, bảo vệ nhánh chính
4Khóa lọt vào commitRevert không xóa được, phải đổi khóa
5Việc ngoài kho: cơ sở dữ liệu, thư, APIGit chỉ lưu tệp, hãy tách môi trường thử
Minh họa, không có thật

Minh họa: một sáng với agent

09:00 · DevTạo nhánh agent/add-discount, giao việc.
09:20 · AgentXong rồi.
09:25 · DevDiff lớn hơn dự kiến. Stash, giữ phần tốt, làm lại gọn hơn.
10:10 · AgentCommit lần hai.
10:12 · DevCommit làm hỏng một test. git revert HEAD.
10:30 · DevĐọc diff, gộp vào main.
Danh sách kiểm

Tám câu hỏi trước khi giao và khi nhận

1Mình đang ở nhánh riêng, hay ở main?
2Trước khi giao, git status có sạch không?
3Agent biết luật Git chưa?
4Mình đã đọc git status và git diff chưa?
5Có tệp nào bị sửa mà mình không nhờ không?
6Có gì giống khóa hay mật khẩu trong diff không?
7Bỏ lần sửa này: stash, restore hay revert?
8Việc này có chạm vào thứ ngoài kho không?
Nhìn cân bằng

Nhìn cân bằng: Git làm được gì, chưa làm được gì

Làm được
  • Cho bạn điểm lưu để thử không sợ hỏng
  • Cho nhiều việc chạy song song nhờ worktree
  • Biến mọi thay đổi thành diff đọc được
Chưa làm được
  • Không bao được thứ ngoài kho, và không cứu phần chưa commit
  • Không ngăn agent làm sai, chỉ giúp quay lại
  • Chưa thấy thử nghiệm đối chứng đo từng thói quen
Kết luận

Điểm lưu không làm agent bớt sai, nhưng làm bạn bớt sợ.

Mỗi việc một nhánh, commit nhỏ, đọc diff trước khi nhận, và nhớ bốn đường lui: restore, revert, reflog, worktree.