Develop Branch là nhánh tích hợp chính trong Git Flow, nơi tất cả các nhánh feature hoàn thành được hợp nhất trước khi chuẩn bị phát hành. Không giống như main, develop chứa các thay đổi mới nhất nhưng chưa được công bố — đây là nơi diễn ra tích hợp mã hàng ngày từ tất cả các nhà phát triển trong nhóm. Theo Atlassian, 2024, develop là nhánh bắt buộc trong Git Flow và cung cấp môi trường tích hợp ổn định cho nhóm.
Những điểm chính
Develop Branch (nhánh phát triển) là một nhánh tồn tại lâu dài trong Git Flow, đóng vai trò là trung tâm tích hợp mã từ tất cả các nhà phát triển. Các nhánh feature được hợp nhất vào nó sau khi hoàn thành phát triển và đánh giá mã.
Mã trong develop luôn ở trạng thái sẵn sàng tạo bản phát hành, mặc dù chưa được triển khai vào sản xuất. Điều này có nghĩa là tất cả các tính năng trong develop đã qua đánh giá, kiểm thử và kiểm tra tích hợp, nhưng vẫn đang chờ chu kỳ phát hành.
Không giống như main, nơi mỗi phiên bản mã là một bản phát hành, develop chứa một luồng thay đổi liên tục. Các commit trong develop xuất hiện khi các nhánh feature được hợp nhất, điều này có thể xảy ra nhiều lần trong ngày.
Theo Vincent Driessen, 2010, develop là yếu tố then chốt của mô hình nhánh thành công, vì nó tách biệt công việc nháp khỏi các phiên bản sẵn sàng phát hành.
Hiểu sự khác biệt giữa develop và main là rất quan trọng để có quy trình Git Flow đúng đắn. Các nhánh này phục vụ các chức năng khác nhau và có yêu cầu ổn định khác nhau.
| Đặc điểm | Develop | Main / Master |
|---|---|---|
| Mục đích | Tích hợp các tính năng mới | Mã phát hành ổn định |
| Tính ổn định | Cao (sau kiểm thử) | Tối đa (sản xuất) |
| Tần suất commit | Hàng ngày (hợp nhất feature) | Theo phát hành (mỗi 1-4 tuần) |
| Nguồn nhánh | Từ nó tạo feature | Từ nó tạo hotfix |
| Hợp nhất | Từ feature qua PR | Từ release qua merge |
Việc phân chia thành develop và main cho phép nhóm liên tục tích hợp mã mới mà không gây rủi ro cho sự ổn định của phiên bản sản xuất. Các nhà phát triển có thể thấy mã của họ trong develop ngay sau khi PR được chấp thuận, ngay cả trước khi phát hành chính thức.
Trong mô hình Git Flow, develop chiếm vị trí trung tâm giữa các nhánh feature (nguồn thay đổi) và nhánh release (chuẩn bị phát hành). Hiểu hệ thống phân cấp này là nền tảng của việc phân nhánh hiệu quả.
Cấu trúc này đảm bảo rằng develop luôn chứa mã mới nhất với tất cả các tính năng mới, trong khi main chỉ chứa mã sản xuất đã được xác minh. Điều này đặc biệt quan trọng đối với các dự án di động có chu kỳ đánh giá dài trên App Store và Google Play.
Develop đóng vai trò là liên kết trung tâm giữa các nhánh feature, release và hotfix. Hiểu hướng hợp nhất là rất cần thiết để ngăn ngừa xung đột và mất commit.
Chất lượng mã trong develop phải cao, nhưng không tuyệt đối. Không giống như main, nơi mỗi lỗi có nghĩa là một hotfix khẩn cấp, develop cho phép những thiếu sót nhỏ sẽ được sửa trước khi phát hành.
Yêu cầu tối thiểu đối với mã trước khi hợp nhất vào develop:
Các kiểm tra tự động trong pipeline CI/CD phải chạy trên mọi push vào develop. Nếu bản dựng hỏng, nhà phát triển chịu trách nhiệm phải sửa vấn đề trong vòng một giờ hoặc hoàn tác commit của họ.
Thiết lập GitHub Actions cho develop đảm bảo rằng mọi PR đều trải qua kiểm tra tự động trước khi hợp nhất. Một pipeline điển hình bao gồm xây dựng, kiểm thử và linting.
# GitHub Actions — kiểm tra develop sau khi hợp nhất
name: Develop CI
on:
pull_request:
branches: [develop]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Unit tests
run: ./gradlew testDebug
- name: Lint
run: ./gradlew lint
- name: Build
run: ./gradlew assembleDebug
Hợp nhất vào develop phải tuân theo các quy tắc nghiêm ngặt để duy trì sự ổn định của nhánh tích hợp. Vi phạm các quy tắc này dẫn đến xung đột, bản dựng hỏng và lãng phí thời gian của nhóm.
Quy tắc PR phải cập nhật đặc biệt quan trọng. Nếu một nhánh feature được tạo một tuần trước và develop đã tiến 50 commit, việc hợp nhất trực tiếp có thể dẫn đến xung đột, tốt nhất nên giải quyết trong bối cảnh PR hơn là trong develop.
Quy tắc bảo vệ nhánh là các cài đặt ở cấp GitHub, GitLab hoặc Bitbucket ngăn chặn các thay đổi không đúng vào develop. Chúng đảm bảo rằng ngay cả một push tình cờ cũng không làm hỏng nhánh tích hợp.
Các quy tắc bảo vệ được khuyến nghị cho develop:
Thiết lập bảo vệ develop mất 10 phút nhưng ngăn chặn nhiều tuần gián đoạn liên quan đến nhánh tích hợp bị hỏng. Đối với các dự án di động với nhóm đa nền tảng, điều này đặc biệt phù hợp.
Hãy xem xét một ngày điển hình của nhà phát triển: buổi sáng họ cập nhật develop, tạo một nhánh feature mới và sau khi hoàn thành nhiệm vụ, hợp nhất các thay đổi trở lại develop.
# Đồng bộ develop buổi sáng
git checkout develop
git pull origin develop
# Tạo nhánh feature mới từ develop
git checkout -b feature/add-push-notifications
# Đang làm việc trên tính năng...
git add . && git commit -m "Add FCM integration"
# Cập nhật develop trong quá trình phát triển
git fetch origin develop
git rebase origin/develop
# Sau khi PR được chấp thuận — cập nhật develop cục bộ
git checkout develop
git pull origin develop
git branch -d feature/add-push-notifications
Lệnh git pull trong develop thực hiện đồng thời hai thao tác: git fetch (lấy commit mới từ máy chủ) và git merge (hợp nhất chúng với nhánh cục bộ). Đối với develop, đây là phương pháp đồng bộ tiêu chuẩn.
Nếu mã làm hỏng bản dựng vào được develop, cần hành động nhanh chóng. Mỗi giờ develop ngừng hoạt động là công việc bị chặn của toàn bộ nhóm phát triển.
Nếu mã làm hỏng bản dựng vào được develop, hãy sử dụng git revert để tạo commit mới hoàn tác các thay đổi có vấn đề. Không sử dụng git reset trong develop — nó ghi đè lịch sử mà các thành viên khác trong nhóm đã có.
# Tìm commit có vấn đề
git log --oneline develop
# Hoàn tác commit qua revert (an toàn)
git revert a1b2c3d
# Gửi bản sửa đến develop từ xa
git push origin develop
# Xem thay đổi trong một commit cụ thể
git show a1b2c3d --stat
Câu hỏi thường gặp
Đối với dự án có một hoặc hai nhà phát triển, develop thường dư thừa — main và các nhánh feature là đủ. Khi nhóm phát triển lên 3+ người, develop trở nên cần thiết để cách ly các tính năng chưa hoàn thành khỏi mã sản xuất ổn định.
Không, commit trực tiếp vào develop bị cấm trong bất kỳ dự án chuyên nghiệp nào. Tất cả các thay đổi đều thông qua Pull Request với đánh giá mã và kiểm tra tự động. Ngoại lệ là các chỉnh sửa hành chính đối với README hoặc cấu hình CI, nhưng ngay cả những điều này cũng tốt nhất nên thực hiện qua PR.
Trong trunk-based development không có nhánh develop riêng biệt — tất cả các nhà phát triển làm việc trong main với các nhánh feature rất ngắn (1-2 ngày). Đây là một giải pháp thay thế cho Git Flow, phổ biến trong văn hóa DevOps với mức độ tự động hóa kiểm thử cao.
Sau mỗi lần phát hành, nhánh release được hợp nhất trở lại develop để đưa vào tất cả các bản sửa lỗi được thực hiện trong quá trình chuẩn bị phát hành. Nếu không làm điều này, develop sẽ khác biệt với mã phát hành, gây ra xung đột trong lần phát hành tiếp theo.
Nếu develop bị hỏng, một nhà phát triển cấp cao tạo nhánh hotfix từ commit ổn định cuối cùng, sửa vấn đề và hợp nhất bản sửa trực tiếp vào develop qua PR với trạng thái đặc biệt. Sau khi khôi phục, phân tích nguyên nhân gốc rễ được thực hiện.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm