Mỗi tính năng được làm trên một nhánh riêng tách từ develop. Code sau đó đi một chiều qua ba môi trường: tích hợp trên develop, nghiệm thu trên staging, rồi phát hành lên production từ main.
Mỗi task làm trên một nhánh riêng tách từ develop mới nhất, rồi merge lại develop qua Merge Request trên GitLab.
# 1. Tách nhánh từ develop mới nhất git fetch origin git checkout develop && git pull origin develop git checkout -b feature/PROJ-123-dang-nhap-google # 2. Làm việc, commit nhỏ và rõ nghĩa git add . git commit -m "feat(auth): thêm đăng nhập Google" # 3. Đồng bộ develop thường xuyên (ít nhất mỗi ngày) git fetch origin git rebase origin/develop # 4. Đẩy nhánh, rồi tạo Merge Request trên GitLab vào develop git push -u origin feature/PROJ-123-dang-nhap-google # sau khi rebase, nhánh đã push cần: # git push --force-with-lease # GitLab → Merge requests → New merge request # Source: feature/PROJ-123-dang-nhap-google # Target: develop # Title: feat(auth): đăng nhập Google [PROJ-123] # 5. Sau khi MR được merge, dọn nhánh git checkout develop && git pull origin develop git branch -d feature/PROJ-123-dang-nhap-google git push origin --delete feature/PROJ-123-dang-nhap-google
--force-with-lease. Nếu nhiều người cùng làm trên một nhánh, hãy git merge origin/develop thay vì rebase.Đưa các tính năng đã tích hợp ổn định trên develop lên staging để QA và khách hàng nghiệm thu.
# 1. Cập nhật nhánh nguồn và đích git fetch origin git checkout develop && git pull origin develop git checkout staging && git pull origin staging # 2. Thử merge cục bộ để phát hiện conflict git merge --no-ff develop # xử lý conflict nếu có, rồi hủy nếu chỉ thử: # git merge --abort # 3. Tạo Merge Request trên GitLab (khuyến nghị) # GitLab → Merge requests → New merge request # Source: develop # Target: staging # Title: Merge develop into staging
git merge cục bộ để kiểm tra conflict, đừng push thẳng lên staging.Phát hành bản đã được nghiệm thu trên staging lên production.
# Tạo Merge Request trên GitLab: staging → main # GitLab → Merge requests → New merge request # Source: staging # Target: main # Title: Merge staging into main
Đưa merge commit của main về lại develop và staging để ba nhánh không bị lệch lịch sử.
git fetch origin # main -> staging git checkout staging && git pull origin staging git merge --no-ff origin/main git push origin staging # main -> develop git checkout develop && git pull origin develop git merge --no-ff origin/main git push origin develop
Sửa lỗi khẩn cấp trên production mà không phải chờ cả chu kỳ develop → staging → main.
git checkout main && git pull origin main git checkout -b hotfix/fix-login-500 # ...sửa lỗi, commit... git push -u origin hotfix/fix-login-500 # GitLab → Merge requests → New merge request # Source: hotfix/fix-login-500 # Target: main # Title: Hotfix: lỗi 500 khi đăng nhập # sau khi merge: đồng bộ main về staging, develop (xem tab 4) git checkout main && git pull origin main
Promote theo thứ tự develop → staging → main. Không merge tắt từ develop thẳng lên main.
Bật branch protection cho staging và main: bắt buộc Merge Request, review và CI xanh trước khi merge.
Giữa các nhánh dài hạn (develop, staging, main), dùng --no-ff. Squash chỉ dành cho feature → develop, vì squash giữa các nhánh dài hạn làm lịch sử lệch nhau.
Không push thẳng lên develop, staging hay main, kể cả khi gấp. Dùng Merge Request trên GitLab hoặc quy trình hotfix.
Không push --force và không rebase develop, staging, main. Trên nhánh feature cá nhân chỉ dùng --force-with-lease.
develop deploy dev, staging deploy UAT, main deploy production. Merge xong CI/CD tự chạy.