Git là gì? Commit và branch giải thích cho fresher Việt Nam【2026】
Git không phải danh sách lệnh cần thuộc lòng ngày đầu. Với fresher Việt Nam: hiểu commit = snapshot có ý nghĩa, branch = đường làm việc song song, remote = bản sao trên GitHub/GitLab. Khi hình dung được ba ý này, vòng status → add → commit → push mới có chỗ đứng. Đừng commit thẳng lên main của team; tạo branch cho từng task.
Sinh viên hoặc intern tuần đầu nghe lead nói “push lên Git rồi tạo PR” — nhiều người mở terminal, gõ bừa, sợ làm hỏng repo. Nguyên nhân thường không phải thiếu lệnh, mà chưa có hình ảnh trong đầu Git đang làm gì.
Bài này giải thích Git là gì theo góc khái niệm commit / branch cho fresher VN. Không phải cheat sheet lệnh hàng ngày (cái đó học sau khi đã hiểu mô hình). Mục tiêu: đọc xong bạn vẽ được sơ đồ local → commit → branch → remote.
Ai nên đọc bài này
- Sinh viên năm 2–4 lần đầu clone repo từ GitHub
- Intern / fresher join team outsource hoặc startup Việt
- Người từng gửi code bằng zip / Zalo / Google Drive và đang chuyển sang Git
Git là gì? (một câu + một hình dung)
Git là hệ thống quản lý phiên bản phân tán (distributed version control): mỗi máy clone đều có lịch sử đầy đủ, không phụ thuộc một server trung tâm để xem log.
Hình dung đơn giản hơn:
| Cách cũ | Với Git |
|---|---|
File baocao_v1.docx, baocao_v2_final.docx, baocao_FINAL_that.docx | Một thư mục project + chuỗi commit có message |
| Gửi zip cho bạn cùng nhóm | Push lên remote, mọi người pull |
| Sửa nhầm → khóc vì không nhớ bản trước | Quay lại commit cũ hoặc so diff |
Git không đồng nghĩa GitHub. Git chạy trên máy bạn; GitHub chỉ là một chỗ phổ biến để host remote.
Ba vùng bạn phải nhớ trước mọi lệnh
Hầu hết nhầm của fresher đến từ việc không phân biệt:
[Working tree] --git add--> [Staging / Index] --git commit--> [Repository]
file đang sửa chọn cái sẽ ghi nhận lịch sử snapshot
- Working tree — bạn mở VS Code, sửa
LoginForm.tsx. File đã đổi trên đĩa, nhưng Git chưa “ghi nhận” gì. - Staging —
git addđưa thay đổi vào danh sách sẽ nằm trong commit kế tiếp. Có thể add từng file, không bắt buộc add hết. - Commit —
git commitđóng gói staging thành một snapshot gắn hash + message + tác giả + thời gian.
Ví dụ thực tế trong đồ án nhóm:
- Bạn sửa 3 file: UI, API mock, và file
.envchứa key test. - Chỉ
git addUI + mock → commit"feat: form login UI". .envkhông add → không lọt lên GitHub. Đó là lý do staging tồn tại.
| Vùng | Câu hỏi kiểm tra | Lệnh liên quan (sau này) |
|---|---|---|
| Working tree | File trên đĩa đã đổi chưa? | git status, git diff |
| Staging | Đã chọn đưa vào commit chưa? | git add, git restore --staged |
| Repository | Snapshot đã ghi vào lịch sử chưa? | git commit, git log |
Commit: không phải “lưu file”, mà là “đóng khung khoảnh khắc”
Commit chứa gì?
Mỗi commit mang:
- Snapshot nội dung project (thực tế Git lưu thông minh theo delta, nhưng bạn hãy nghĩ “ảnh toàn bộ”)
- Message — câu trả lời “tại sao / làm gì”
- Parent — commit đứng trước (tạo thành chuỗi lịch sử)
- Hash (SHA) — ID duy nhất, ví dụ
a3f1c02
Message tốt cho fresher VN
Team outsource khách Nhật/US thường dùng tiếng Anh ngắn:
feat: validate empty password on login
fix: correct timezone display on dashboard
Repo đồ án nội bộ có thể tiếng Việt, nhưng một PR một ngôn ngữ, tránh "update", "fix bug", "sửa tí".
Sai tư duy phổ biến
| Tư duy sai | Hệ quả | Tư duy đúng |
|---|---|---|
| Commit càng ít càng tốt | Diff khổng lồ, review chết | Commit nhỏ theo ý nghĩa |
| Commit = backup mỗi 5 phút | Lịch sử rác | Commit khi hoàn thành một ý |
| Đã commit = đã lên GitHub | Team không thấy gì | Cần push mới lên remote |
Branch: đường ray song song trên cùng repo
Hình dung main (hoặc master) là đường ray chính — bản team đồng ý là ổn định. Mỗi task của bạn là nhánh phụ:
main: A --- B --- C --- E
\
feature: D --- D2 ← bạn đang làm ở đây
- Tạo branch = đánh dấu “tôi thử nghiệm từ commit C”.
- Sửa trên branch không đụng file mà người khác đang xem trên
main(cho đến khi merge). - Merge / Pull Request = đề nghị gộp D2 vào
mainsau khi review.
Vì sao fresher bắt buộc dùng branch?
- An toàn tâm lý — thử sai trên branch riêng;
mainvẫn sạch. - Review — lead đọc PR theo nhánh, không đọc zip.
- Song song — bạn A làm login, bạn B làm admin: hai branch, ít đụng nhau hơn sửa chung một thư mục Drive.
Quy tắc ngày đầu: không commit trực tiếp lên main của repo team. Tạo feature/... hoặc fix/..., làm việc ở đó.
Local vs remote (chỗ hay nhầm nhất)
Máy bạn (local) GitHub/GitLab (remote)
───────────────── ───────────────────────
working tree
commits của bạn ----push----> origin/main, origin/feature/...
<---pull----
- clone — tải remote về máy lần đầu (có đủ lịch sử).
- push — gửi commit local lên remote.
- pull / fetch — lấy commit người khác về.
Bạn có thể commit rất nhiều lần offline (trên xe bus, quán cafe mất Wi-Fi). Chỉ khi có mạng mới push. Đây là điểm mạnh của Git so với chỉ lưu trên Drive.
Case study ngắn: tuần đầu intern
Bối cảnh: Intern FE join team agency Hà Nội, repo khách trên GitHub.
Ngày 1 (sai): Clone xong, sửa thẳng trên main, git add ., commit "update", push — bị lead revert vì lọt node_modules và đụng code người khác.
Ngày 2 (đúng mental model):
pull main mới nhất
tạo branch fix/header-mobile
sửa → status → add đúng file → commit message rõ
push branch → mở Pull Request
Lead review 10 phút, merge. Intern hiểu: branch bảo vệ main; commit kể chuyện; push chia sẻ.
Checklist tự hỏi trước khi gõ lệnh
- Tôi đang ở branch nào? (
git statusdòng đầu) - Thay đổi đang ở working tree hay đã stage?
- Commit này một ý hay đang nhồi UI + hotfix + xóa file tạm?
- Sau commit, team đã thấy chưa? (chưa thì cần push)
- File secret (
.env, key) đã nằm trong.gitignorechưa?
Khi checklist này thành phản xạ, học lệnh chi tiết sẽ nhanh hơn rất nhiều.
Câu hỏi thường gặp
Git khác GitHub thế nào?
Git = công cụ trên máy. GitHub = remote + UI (PR, Issues). Còn GitLab, Bitbucket, Azure DevOps — cùng vai trò remote khác nhau.
Có cần thuộc hết lệnh ngày đầu không?
Không. Nắm commit / branch / remote trước. Vòng lệnh hàng ngày học ở bài cheat sheet riêng.
Mất file vì Git?
Hiếm khi “Git xóa mất” nếu bạn chưa reset --hard / clean. Thường fresher sợ quá nên không commit — ngược lại, commit sớm (trên branch riêng) là lưới an toàn.
Bước tiếp theo
- Mở repo đồ án hoặc repo mẫu, chạy
git log --oneline— nhìn chuỗi commit thật. - Tạo một branch thử, sửa 1 file README, commit với message rõ.
- Khi đã quen mô hình, học cheat sheet lệnh hàng ngày: status, add, commit, branch, PR.
Git là kỹ năng nền của hầu hết việc junior / freelance / outsource ở Việt Nam. Đầu tư 15 phút vào khái niệm hôm nay rẻ hơn cả tuần sợ terminal.