12 bài trước đi từ mô hình object bất biến tới remote, submodule, hooks, tag — mỗi bài 1 khái niệm riêng lẻ. Bài cuối này tổng hợp tất cả vào 1 dự án duy nhất: Git Kata Trainer — mỗi "kata" cho bạn 1 đồ thị commit khởi đầu và 1 mục tiêu cấu trúc cần đạt được, bạn tự gõ lệnh Git thật để biến đồ thị ban đầu thành đúng kết quả mong muốn, và được chấm điểm tự động.

Tổng Kết Hành Trình 12 Bài

Kata Kỹ năng ôn lại Bài liên quan
1 Tạo branch, chuyển HEAD, commit trên nhánh mới Bài 3
2 Merge 2 nhánh phân kỳ thành 1 merge commit Bài 4
3 Rebase để có lịch sử tuyến tính thay vì merge commit Bài 5
4 Cherry-pick đúng 1 commit mà không merge cả nhánh Bài 6
5 Dùng reset --hard để loại bỏ 1 commit lỗi Bài 7
6 Đánh dấu release bằng annotated tag Bài 12

Cách Chấm Điểm Hoạt Động

Mỗi kata mô tả rõ trạng thái khởi đầu và mục tiêu bằng lời — không có 1 chuỗi lệnh "đúng" duy nhất. Nút "Kiểm tra" không so sánh lệnh bạn gõ, mà đọc thẳng cấu trúc đồ thị commit hiện tại (con trỏ branch, quan hệ cha-con, tag) để xác nhận mục tiêu đã đạt — y hệt cách 1 bài test tự động thật kiểm tra kết quả cuối cùng thay vì cách bạn làm ra nó.

Sân chơi: Git Kata Trainer

Chọn 1 kata, đọc mục tiêu, gõ lệnh vào terminal, rồi bấm "Kiểm tra" khi nghĩ đã xong.

🥋 Dự án: Git Kata Trainer

Chọn Kata

Terminal giả lập

  • git commit -m "..."
  • git branch <tên> [ref]
  • git checkout [-b] <tên>
  • git merge <branch>
  • git rebase <branch>
  • git cherry-pick <ref>
  • git reset --hard <ref>
  • git tag [-a] <tên> [-m "..."]

Nhật ký

git-kata-trainer-live.js

Trắc nghiệm ôn tập

Câu 1: Điều kiện nào khiến git merge chỉ di chuyển con trỏ (fast-forward) thay vì tạo 1 merge commit mới?

Trắc nghiệm ôn tập

Câu 2: Vì sao commit sau khi rebase luôn có hash khác với commit gốc trước khi rebase?

Trắc nghiệm ôn tập

Câu 3: Annotated tag khác lightweight tag ở điểm nào khiến nó phù hợp hơn cho release chính thức?

📖 Tài liệu tham khảo / References

Bài viết liên quan trong series

Bài 12: Tags & Aliases Nâng Cao Quay lại Lộ trình Series Git