Git Flow đơn giản cho team nhỏ
Nguyên tắc: main luôn sạch, luôn deploy được. Mọi thay đổi phải qua branch riêng → Pull Request → review → merge. Không ai commit trực tiếp vào main.
// File: workflow.sh
# 1. Lấy code mới nhất từ main
git checkout main
git pull origin main
# 2. Tạo branch cho feature mới
git checkout -b feature/add-search-bar
# 3. Code, commit nhiều lần
git add .
git commit -m "feat: add search input UI"
git commit -m "feat: add search API integration"
git commit -m "test: add search tests"
# 4. Push branch lên GitHub
git push origin feature/add-search-bar
# 5. Tạo Pull Request trên GitHub
# → Team review → approve → merge vào main
# 6. Sau khi merge, xoá branch cũ
git checkout main
git pull origin main
git branch -d feature/add-search-bar
Commit message chuẩn (Conventional Commits)
| Prefix | Ý nghĩa | Ví dụ |
|---|---|---|
feat: | Tính năng mới | feat: add user search |
fix: | Sửa bug | fix: login fails on mobile |
docs: | Cập nhật tài liệu | docs: update README setup |
style: | Format code (không đổi logic) | style: fix indentation |
refactor: | Tái cấu trúc (không đổi hành vi) | refactor: extract auth utils |
test: | Thêm/sửa test | test: add login integration test |
chore: | Việc vặt (config, dependencies) | chore: update eslint config |
Pull Request: quy trình review
PR không chỉ là “xin merge”. PR là nơi team trao đổi, học hỏi, và bảo vệ chất lượng code. PR tốt có: tiêu đề rõ ràng, mô tả vì sao thay đổi, screenshot nếu có UI, và test pass.
// File: pr-template.md
## PR Template mẫu
### Mô tả
Thêm tính năng tìm kiếm user theo tên và email.
### Loại thay đổi
- [x] Feature mới
- [ ] Bug fix
- [ ] Refactor
### Checklist
- [x] Test pass
- [x] Code đã được format
- [x] Không có console.log thừa
- [x] Đã tự review code một lần
### Screenshots (nếu có UI)
| Trước | Sau |
|-------|-----|
| (ảnh) | (ảnh) |
Xử lý conflict khi merge
// File: conflict.sh
# Khi branch của bạn conflict với main
# Cách 1: Rebase (lịch sử sạch hơn)
git checkout feature/add-search-bar
git rebase main
# → Sửa conflict → git add → git rebase --continue
# Cách 2: Merge (an toàn hơn)
git checkout feature/add-search-bar
git merge main
# → Sửa conflict → git add → git commit
# Tip: dùng VS Code để sửa conflict — có UI rất trực quan
# Accept Current | Accept Incoming | Accept Both
Branch nên sống ngắn (1-3 ngày). Branch sống lâu → conflict nhiều → merge khó. Chia task nhỏ, commit thường xuyên, merge sớm.
❓ Vì sao không nên commit trực tiếp vào main?
- Tạo feature branch và push lên GitHub
- Viết commit message theo Conventional Commits
- Tạo Pull Request với mô tả rõ ràng
- Xử lý merge conflict bằng VS Code