Git branching · Release flow

Quy trình merge code từ develop đến main

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.

feature/*→ develop→ staging→ main

Sơ đồ luồng nhánh

mainProduction stagingUAT / nghiệm thu developDev / tích hợp feature/*Nhánh tính năng MR feature → develop (squash) MR #1 develop → staging MR #2 staging → main main → develop (đồng bộ)
Merge tiến (promote) Merge ngược sau release ● Lớn: commit merge   ● Nhỏ: commit thường

Từng bước thực hiện

Quy định khi phát triển tính năng

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.

Tách từ
develop đã pull mới nhất
Đặt tên
feature/PROJ-123-mo-ta-ngan
Loại khác
bugfix/, refactor/, chore/, docs/
Phạm vi
Một nhánh cho một ticket
Commit
Theo Conventional Commits: feat:, fix:, refactor:...
Duyệt
1 reviewer + CI xanh
Cách merge
Squash merge, xóa nhánh sau khi merge

Điều kiện trước khi mở và merge MR

Lệnh

# 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
Chỉ rebase trên nhánh feature của riêng bạn và dùng --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.

Quy tắc cần giữ

Chỉ đi một chiều

Promote theo thứ tự develop → staging → main. Không merge tắt từ develop thẳng lên main.

Bảo vệ nhánh

Bật branch protection cho staging và main: bắt buộc Merge Request, review và CI xanh trước khi merge.

Dùng merge commit

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 trực tiếp

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 force-push

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.

Mỗi nhánh một môi trường

develop deploy dev, staging deploy UAT, main deploy production. Merge xong CI/CD tự chạy.