Code đi một chiều qua ba môi trường: kiểm tra nội bộ trên develop, nghiệm thu trên staging, rồi phát hành lên production từ main.
Đư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. Mở Pull Request (khuyến nghị) gh pr create --base staging --head develop \ --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.
# 1. Mở Pull Request gh pr create --base main --head staging \ --title "Release v1.4.0" # 2. Sau khi PR được duyệt và merge, gắn tag git checkout main && git pull origin main git tag -a v1.4.0 -m "Release v1.4.0" git push origin v1.4.0
Đưa merge commit và tag của main về lại develop và staging để ba nhánh không bị lệch lịch sử.
git fetch origin --tags # 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 gh pr create --base main \ --title "Hotfix: lỗi 500 khi đăng nhập" # sau khi merge: tag rồi đồng bộ về staging, develop git checkout main && git pull origin main git tag -a v1.4.1 -m "Hotfix v1.4.1" git push origin v1.4.1
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 PR, review và CI xanh trước khi merge.
Giữa các nhánh dài hạn, dùng --no-ff. Squash và rebase làm lịch sử lệch nhau và gây conflict lặp lại.
Không push thẳng lên develop, staging hay main, kể cả khi gấp. Dùng PR hoặc quy trình hotfix.
Không push --force và không rebase các nhánh dùng chung.
develop deploy dev, staging deploy UAT, main deploy production. Merge xong CI/CD tự chạy.