Hotfix Branch là một loại nhánh Git được thiết kế để sửa lỗi nghiêm trọng khẩn cấp trên môi trường production. Không giống như các nhánh thông thường, hotfix được tạo trực tiếp từ nhánh chính (main/master) và sau khi sửa, đượcmerge ngược lại vào cả main và develop cùng lúc. Theo Atlassian, 2025, mô hình Git Flow với các nhánh hotfix được 67% nhóm sử dụng khi làm việc theo quy trình phát hành nghiêm ngặt.
Những điểm chính
Hotfix Branch là một nhánh tạm thời trong Git được tạo ra để sửa nhanh các lỗi nghiêm trọng trên môi trường production đang hoạt động. Không giống như các nhánh feature, được phân nhánh từ develop và tồn tại trong vài ngày hoặc vài tuần, hotfix được tạo từ main/master và chỉ tồn tại trong thời gian cần thiết để sửa lỗi.
Mục tiêu chính của hotfix là giảm thiểu thời gian giữa việc phát hiện lỗi nghiêm trọng và sửa nó trên production. Nhóm không chờ đợi sprint hiện tại hoặc chu kỳ phát hành kết thúc mà phát hành bản vá ngay lập tức. Điều này đặc biệt quan trọng đối với ứng dụng di động, nơi lỗi nghiêm trọng có thể chặn người dùng và dẫn đến rời bỏ.
Theo Google Play Console, thời gian xem xét cập nhật trung bình trên Google Play là 2 đến 24 giờ. Đối với App Store, xem xét nhanh có thể mất 1 đến 4 giờ. Các nhánh hotfix cho phép chuẩn bị bản sửa trước khi quá trình kiểm duyệt hoàn tất và phát hành ngay sau khi được phê duyệt.
Quy trình hotfix bao gồm ba bước: tạo nhánh từ main, thực hiện sửa lỗi vàmerge ngược vào main và develop. Sự khác biệt chính so với sửa lỗi thông thường là hotfix luôn đượcmerge vào cả hai nhánh, để bản sửa không bị mất trong lần phát hành tiếp theo.
Nhóm không nên đưa chức năng mới hoặc tái cấu trúc vào hotfix. Chỉ sửa lỗi tập trung, tối thiểu cần thiết để giải quyết vấn đề nghiêm trọng. Bất kỳ sai lệch nào khỏi quy tắc này đều làm tăng nguy cơ hồi quy và làm chậm quá trình phát hành bản vá.
Hotfix cần thiết trong ba kịch bản: lỗi nghiêm trọng chặn người dùng (treo máy, mất dữ liệu), lỗ hổng bảo mật cần đóng ngay lập tức hoặc logic kinh doanh quan trọng bị hỏng (thanh toán, xác thực). Nếu lỗi không nghiêm trọng, nó có thể được sửa trong chu kỳ phát hành thông thường qua develop.
Đối với ứng dụng di động, hotfix cũng có thể bao gồm thay đổi phía máy chủ nếu kiến trúc cho phép bật/tắt tính năng từ xa (feature flags). Trong trường hợp này, nhánh hotfix có thể tối thiểu hoặc không cần thiết nếu bản sửa có thể thực hiện ở phía máy chủ.
Không phải tất cả mô hình nhánh đều hỗ trợ nhánh hotfix. Git Flow truyền thống bao gồm hotfix như một loại nhánh đầy đủ, trong khi các phương pháp hiện đại hơn (GitHub Flow, Trunk-based) xử lý sửa lỗi khẩn cấp theo cách khác.
Git Flow là mô hình duy nhất mà hotfix là loại nhánh tích hợp cùng với feature và release. Trong Git Flow, hotfix được tạo từ main và sau khi hoàn thành, đượcmerge vào cả main (với thẻ phiên bản) và develop. Điều này đảm bảo bản sửa không bị mất trong lần phát hành tiếp theo.
| Đặc điểm | Hotfix trong Git Flow | Feature trong Git Flow |
|---|---|---|
| Từ nhánh nào | main | develop |
| merge vào đâu | main + develop | develop |
| Vòng đời | giờ | ngày / tuần |
| Nội dung | chỉ sửa lỗi | chức năng mới |
GitHub Flow không sử dụng loại nhánh riêng cho hotfix. Thay vào đó, nhà phát triển tạo một nhánh feature thông thường từ main, thực hiện sửa lỗi và mở Pull Request. Sau khi xem xét và kiểm tra CI, nhánh đượcmerge vào main và triển khai ngay lập tức. Ưu điểm là đơn giản, nhược điểm là thiếu kênh riêng cho sửa lỗi khẩn cấp.
Phát triển Trunk-based xử lý hotfix thông qua commit trực tiếp vào main (cho các trường hợp nghiêm trọng) với xem xét bắt buộc sau đó. Cách tiếp cận này đòi hỏi kỷ luật nhóm cao và kiểm thử tự động đáng tin cậy, vì các thay đổi đi vào production ngay lập tức.
Tạo hotfix bắt đầu bằng việc chuyển sang nhánh chính và tạo nhánh mới với tiền tố hotfix/. Hãy xem quy trình từng bước qua ví dụ sửa lỗi nghiêm trọng trong ứng dụng di động.
Bước đầu tiên — chuyển sang main và đảm bảo nhánh đã được cập nhật. Sau đó tạo nhánh hotfix với tên rõ ràng phản ánh bản chất của việc sửa lỗi.
# Chuyển sang main và lấy các thay đổi mới nhất
git checkout main
git pull origin main
# Tạo nhánh hotfix
git checkout -b hotfix/crash-on-login
Sau khi tạo nhánh, bạn có thể thực hiện sửa lỗi. Điều quan trọng cần nhớ: hotfix nên chứa số lượng thay đổi tối thiểu. Không tái cấu trúc mã hoặc thêm tính năng mới — chỉ sửa lỗi tập trung giải quyết vấn đề.
Commit trong hotfix nên có thông điệp cung cấp thông tin mô tả rõ ràng vấn đề và giải pháp. Định dạng: loại(phạm vi): mô tả ngắn + liên kết đến tác vụ trong tracker.
# Thêm các tệp đã thay đổi
git add src/ui/login/LoginActivity.kt
# Tạo commit với mô tả
git commit -m "fix(login): handle null intent on activity resume
Fixes CRASH-142: NullPointerException when LoginActivity
receives onNewIntent after being destroyed by system"
Thông điệp commit nên chứa mô tả vấn đề và liên kết đến tác vụ. Điều này giúp tìm kiếm trong lịch sử dễ dàng và giúp đồng nghiệp hiểu những gì đã được sửa và tại sao. Đối với dự án di động, cũng thường bao gồm phiên bản ứng dụng nơi lỗi được tìm thấy.
Bước cuối cùng làmerge hotfix ngược vào main (với thẻ phiên bản vá mới) và develop (để bản sửa được giữ lại trong lần phát hành tiếp theo). Đầu tiên,merge vào main với thẻ, sau đómerge vào develop.
# merge vào main và tạo thẻ
git checkout main
git merge --no-ff hotfix/crash-on-login
git tag -a v2.3.1 -m "Hotfix: crash on login"
# merge vào develop
git checkout develop
git merge --no-ff hotfix/crash-on-login
# Đẩy thay đổi lên máy chủ
git push origin main --tags
git push origin develop
Cờ --no-ff đảm bảo tạo commitmerge, ngay cả khi hotfix có thể được áp dụng qua fast-forward. Điều này giữ lại thông tin rằng một sửa lỗi khẩn cấp đã được thực hiện và giúp phân tích lịch sử trong tương lai dễ dàng hơn.
Hotfix khác cơ bản so với nhánh feature và release về mục đích, vòng đời và quy tắcmerge. Hiểu những khác biệt này rất quan trọng để tổ chức đúng quy trình Git trong nhóm.
Nhánh feature dành cho chức năng mới. Nó tồn tại từ vài ngày đến vài tuần, được tạo từ develop vàmerge ngược vào develop. Feature có thể chứa nhiều commit, bao gồm cả thử nghiệm, sau đó được nén qua squash hoặc rebase.
Nhánh release chuẩn bị bản phát hành để triển khai. Nó được tạo từ develop, sửa các lỗi tìm thấy trong quá trình ổn định và không nhận chức năng mới. Sau khi hoàn thành, release đượcmerge vào main (có thẻ) và develop.
Hotfix thì ngược lại, được tạo vàmerge trực tiếp với main, bỏ qua develop (mặc dù sau khi sửa cũng được đồng bộ với develop). Nó chứa số lượng thay đổi tối thiểu và tồn tại trong thời gian tối thiểu. Trong khi nhánh feature hoặc release có thể trì hoãn đến chu kỳ tiếp theo, hotfix thì không thể.
Đối với phát triển di động, sự khác biệt này đặc biệt quan trọng: App Store và Google Play cho phép phát hành phiên bản vá riêng biệt với các bản phát hành chính. Nhánh hotfix đảm bảo bản phát hành vá không bị trộn lẫn với các tính năng chưa hoàn thành.
Lỗi khi làm việc với hotfix có thể làm mất đi lợi ích của việc sửa lỗi khẩn cấp. Hãy xem năm vấn đề phổ biến nhất phát sinh trong các nhóm sử dụng Git Flow.
Mỗi lỗi này đều dẫn đến chậm trễ phát hành bản vá hoặc xuất hiện vấn đề mới trên production. Các nhóm nên ghi lại quy tắc làm việc với hotfix trong CONTRIBUTING.md và tự động hóa chúng qua kiểm tra CI/CD.
Câu hỏi thường gặp
Hotfix sửa lỗi nghiêm trọng trên production và được tạo từ main, trong khi sửa lỗi thông thường sửa lỗi trong develop và sẽ được đưa vào bản phát hành theo kế hoạch tiếp theo. Hotfix yêu cầu phát hành ngay phiên bản vá.
Có, hotfix có thể được tạo trong bất kỳ mô hình nhánh nào. Trong GitHub Flow, sử dụng nhánh feature thông thường từ main vớimerge qua Pull Request. Trong Trunk-based — commit trực tiếp vào main với xem xét bắt buộc sau đó.
Nên có, nhưng xem xét nhanh được chấp nhận. Đối với lỗi nghiêm trọng, có thể sử dụng cơ chế “approve after merge” — hotfix đượcmerge trước, xem xét thực hiện sau. Điều quan trọng là ghi lại quy trình này trong quy tắc của nhóm.
Định dạng: hotfix/mô-tả-ngắn-vấn-đề. Ví dụ: hotfix/null-pointer-auth, hotfix/crash-on-payment. Tên nên dễ hiểu cho tất cả thành viên nhóm và lý tưởng nhất là chứa số tác vụ trong tracker.
Giải quyết xung đột khimerge vào develop nhưmerge thông thường. Nếu xung đột đáng kể, có thể có thay đổi trong develop ảnh hưởng đến cùng khu vực. Trong trường hợp này, quan trọng là đảm bảo bản sửa hoạt động chính xác với mã mới.
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