GitHub Flow – quy trình teamwork chuẩn
Bài trước: 08. Làm việc nhóm với GitHub
Bài tiếp theo: 10. Pull Request và Review Code
🎯 Mục tiêu học tập
- Hiểu GitHub Flow là gì và các bước trong quy trình
- Thực hành tạo branch từ main, phát triển tính năng, tạo Pull Request
- Nắm được quy tắc vàng: không commit trực tiếp vào main
- Áp dụng GitHub Flow vào dự án thực tế
📘 Kiến thức lý thuyết
GitHub Flow là gì?
GitHub Flow là một quy trình làm việc nhóm đơn giản và hiệu quả, được GitHub đề xuất. Quy trình này phù hợp với các dự án có deploy thường xuyên.
Đặc điểm:
- Đơn giản, dễ hiểu
- Phù hợp với dự án nhỏ và vừa
- Không có branch phức tạp (như Git Flow)
- Main branch luôn deploy được
Quy trình GitHub Flow (6 bước)
1. Tạo branch từ main
↓
2. Phát triển tính năng trên branch
↓
3. Commit và push lên GitHub
↓
4. Tạo Pull Request (PR)
↓
5. Review code và thảo luận
↓
6. Merge vào main và deployChi tiết từng bước
Bước 1: Tạo branch từ main
Quy tắc vàng: Luôn tạo branch mới từ main trước khi bắt đầu làm việc.
# Đảm bảo main đã cập nhật
git checkout main
git pull origin main
# Tạo branch mới
git checkout -b feature/add-login-formQuy ước đặt tên branch:
feature/ten-tinh-nang: Tính năng mớibugfix/ten-loi: Sửa lỗihotfix/ten-sua: Sửa khẩn cấpdocs/cap-nhat: Cập nhật tài liệu
Bước 2: Phát triển tính năng
- Làm việc bình thường trên branch
- Commit thường xuyên với message rõ ràng
- Test code trước khi push
# Làm việc, commit nhiều lần
git add .
git commit -m "Thêm form đăng nhập"
git commit -m "Thêm validation cho form"Bước 3: Push lên GitHub
# Push branch lên GitHub
git push -u origin feature/add-login-formLưu ý: Push branch riêng, không push trực tiếp vào main!
Bước 4: Tạo Pull Request
- Vào GitHub → Repository → Click "New Pull Request"
- Chọn branch source (branch của bạn) và target (main)
- Điền mô tả về thay đổi
- Gán reviewer (người review code)
- Click "Create Pull Request"
Pull Request mẫu:
Title: Thêm form đăng nhập
Description:
- Thêm HTML form với các trường email và password
- Thêm validation client-side
- Responsive trên mobile
Related issue: #123Bước 5: Review và thảo luận
- Reviewer xem code, comment, đề xuất sửa đổi
- Author sửa code, push thêm commit
- Thảo luận đến khi mọi người đồng ý
Best practices:
- Reviewer nên review trong vòng 24-48 giờ
- Comment rõ ràng, constructive
- Author nên sửa ngay khi có comment
Bước 6: Merge và deploy
- Sau khi approve, merge PR vào main
- Xóa branch (GitHub có tùy chọn tự động)
- Deploy code mới lên production
Tại sao dùng GitHub Flow?
✅ Ưu điểm:
- Đơn giản: Dễ học, dễ áp dụng
- Nhanh: Tính năng được merge nhanh
- An toàn: Main branch luôn ổn định
- Review code: Đảm bảo chất lượng code
- Lịch sử: Mỗi PR là một "câu chuyện" về tính năng
⚠️ Nhược điểm:
- Không phù hợp dự án lớn: Cần branch phức tạp hơn (Git Flow)
- Cần discipline: Mọi người phải tuân thủ quy trình
So sánh với Git Flow
| GitHub Flow | Git Flow |
|---|---|
| Đơn giản, 1 branch chính | Phức tạp, nhiều branch (dev, release, hotfix) |
| Phù hợp dự án nhỏ/vừa | Phù hợp dự án lớn, có nhiều version |
| Main luôn deploy được | Có branch develop riêng |
| Dễ học | Khó học hơn |
Khuyến nghị: Người mới nên bắt đầu với GitHub Flow
💻 Ví dụ thực hành
Scenario: Thêm tính năng "Tìm kiếm sản phẩm"
# Bước 1: Cập nhật main
git checkout main
git pull origin main
# Bước 2: Tạo branch mới
git checkout -b feature/product-search
# Bước 3: Phát triển tính năng
# Tạo file search.js
echo "function searchProduct() { ... }" > search.js
git add search.js
git commit -m "Thêm function tìm kiếm sản phẩm"
# Tạo file search.html
echo "<input id='search' />" >> search.html
git add search.html
git commit -m "Thêm UI tìm kiếm"
# Bước 4: Test và commit cuối
git add .
git commit -m "Hoàn thành tính năng tìm kiếm"
# Bước 5: Push lên GitHub
git push -u origin feature/product-searchSau đó trên GitHub:
- Vào repository
- GitHub sẽ hiện banner "feature/product-search had recent pushes"
- Click "Compare & pull request"
- Điền thông tin PR
- Click "Create pull request"
Review và sửa code
# Tình huống: Reviewer yêu cầu sửa
# Bước 1: Sửa code trên branch
git checkout feature/product-search
# Sửa file theo comment
# ...
# Bước 2: Commit và push
git add .
git commit -m "Sửa theo review: thêm error handling"
git push origin feature/product-search
# PR sẽ tự động cập nhật, reviewer sẽ thấy thay đổi mớiMerge Pull Request
Trên GitHub web:
Vào PR → Xem lại code và comment
Nếu OK, click "Merge pull request"
Chọn merge type:
- Create a merge commit: Giữ nguyên lịch sử (khuyến nghị)
- Squash and merge: Gom tất cả commit thành 1
- Rebase and merge: Rebase lên main (lịch sử thẳng)
Click "Confirm merge"
Xóa branch (nếu muốn)
Sau khi merge:
# Cập nhật main local
git checkout main
git pull origin main
# Xóa branch local (đã merge xong)
git branch -d feature/product-search🧩 Bài tập
Level 1: Cơ bản
Bài tập 1: Thực hành GitHub Flow đơn giản
- Tạo repository trên GitHub tên
github-flow-practice - Clone về máy và tạo file
index.htmlcơ bản - Commit và push lên main
- Tạo branch
feature/add-styles - Thêm file
style.cssvà commit - Push branch lên GitHub
- Tạo Pull Request trên GitHub
- Merge PR vào main
- Pull code mới về máy và xác nhận có file
style.css
Mục tiêu: Hoàn thành đầy đủ quy trình GitHub Flow
Level 2: Nâng cao
Bài tập 2: Làm việc nhóm với GitHub Flow
Tạo team 2-3 người, mỗi người làm một tính năng:
Người 1:
- Tạo branch
feature/header - Thêm component header
- Tạo PR
Người 2:
- Tạo branch
feature/footer - Thêm component footer
- Tạo PR
Người 3:
- Review PR của 2 người kia
- Comment và yêu cầu sửa (nếu cần)
- Approve và merge PR
Yêu cầu:
- Mỗi người phải tạo branch từ main mới nhất
- Mỗi PR phải có description rõ ràng
- Có ít nhất 1 lần review và sửa code
- Sau khi merge, main phải có đủ tất cả tính năng
Mục tiêu: Hiểu được workflow thực tế khi làm việc nhóm
💡 Mẹo & Lỗi thường gặp
1. Quên cập nhật main trước khi tạo branch
Vấn đề: Branch mới dựa trên main cũ, thiếu code mới
Giải pháp:
# Luôn pull main trước
git checkout main
git pull origin main
git checkout -b feature/new2. Push nhầm vào main
Vấn đề: Commit trực tiếp vào main, vi phạm quy trình
Giải pháp:
# Tạo branch từ commit hiện tại
git branch feature/fix
# Reset main về commit trước
git reset --hard origin/main
# Chuyển sang branch mới (commit vẫn còn)
git checkout feature/fixCách tránh: Cấu hình branch protection trên GitHub (chỉ merge qua PR)
3. PR quá lớn, khó review
Vấn đề: PR có 50+ file thay đổi, reviewer không biết bắt đầu từ đâu
Giải pháp:
- Tách thành nhiều PR nhỏ
- Mỗi PR chỉ làm 1 tính năng
- Commit message rõ ràng
Nguyên tắc: PR nên review được trong 1 giờ
4. Không biết khi nào nên tạo PR
Quy tắc:
- Tính năng đã hoàn thành và test
- Code đã clean, không có console.log thừa
- Đã tự review lại code của mình
- Có description rõ ràng
KHÔNG tạo PR khi:
- Code đang làm dở (dùng draft PR)
- Code chưa test
- Có TODO hoặc comment tạm thời
5. Conflict khi merge PR
Nguyên nhân: Main đã có code mới trong lúc bạn làm branch
Giải pháp:
# Update branch với main mới nhất
git checkout feature/your-branch
git fetch origin
git merge origin/main
# Hoặc rebase
git rebase origin/main
# Resolve conflict nếu có
# Push lại
git push origin feature/your-branch
# PR sẽ tự động updateÁp dụng vào làm việc nhóm:
- Quy tắc team: Thống nhất dùng GitHub Flow
- Code review: Mỗi PR phải có ít nhất 1 người review
- Communication: Comment trên PR khi có vấn đề
- Merge strategy: Thống nhất dùng "Create a merge commit" hay "Squash and merge"
Kết luận: GitHub Flow là quy trình đơn giản nhưng mạnh mẽ. Nắm vững quy trình này giúp bạn làm việc nhóm hiệu quả và chuyên nghiệp. Nhớ quy tắc vàng: Không bao giờ commit trực tiếp vào main!
Bài tiếp theo: 10. Pull Request và Review Code - Học cách tạo PR chuyên nghiệp và review code hiệu quả