Có vẻ như bạn có một vài vấn đề ở đây:
1. Xác định các tính năng cho một bản phát hành cụ thể
Đây là một vấn đề quản lý dự án, và một vấn đề phối hợp. Sẽ này tính năng được phát hành trước đó, đồng thời như, hoặc sau này khác tính năng? Nếu phát hành muốn xảy ra một tính năng tại một thời điểm, sau đó xác định đó. Nếu các tính năng sẽ được nhóm thành các bản phát hành, thì hãy tìm hiểu xem các nhóm đó là gì và thực thi nó với các nhà phát triển và người ra quyết định. Sử dụng theo dõi vấn đề hoặc hệ thống bán vé của bạn để gắn thẻ phát hành. Làm rõ rằng nếu một tính năng của một bản phát hành cụ thể là không có, thì tất cả chúng đều như vậy.
2. Chiến lược phân nhánh
Git-Flow là câu trả lời dễ dàng cho các vấn đề như thế này và mọi người thường sử dụng một biến thể của luồng git ngay cả khi họ không biết nó là gì. Tôi sẽ không nói rằng đó là một vấn đề cho tất cả các vấn đề, nhưng nó giúp ích rất nhiều.
Có vẻ như bạn đang gặp vấn đề với các chiến lược phát hành không xác định, trong đó các tính năng được phê duyệt scattershot và thứ gì đó đã bắt đầu phát triển từ lâu có thể được phát hành sau khi một thứ bắt đầu gần đây - tính năng nhảy vọt.
Các nhánh tính năng tồn tại lâu hoặc các nhánh phát hành đồng thời có lẽ là câu trả lời tốt nhất cho các loại vấn đề này. Hợp nhất (hoặc rebase, nếu bạn cảm thấy thoải mái với nó) mới nhất từ chủ thành các nhánh hoạt động lâu dài của bạn. Hãy cẩn thận để chỉ hợp nhất trong các tính năng đã có, nếu không bạn sẽ gặp phải các vấn đề mà bạn hiện đang gặp phải (quá nhiều tính năng lẫn lộn trên một nhánh).
Các nhánh "Hotfix" hoặc "bugfix" là một phần thiết yếu của quy trình này; sử dụng chúng cho các bản sửa lỗi nhỏ một lần có chu kỳ QA ngắn.
Từ mô tả của bạn, có thể tốt hơn nếu không duy trì một nhánh 'phát triển' chính thức. Thay vào đó, phân nhánh tất cả các tính năng của chủ và tạo các nhánh phát hành được hợp nhất sau khi một bản phát hành được xác định.
3. Môi trường
Không ghép các nhánh git với môi trường của bạn, ngoại trừ sản xuất == master. Chi nhánh 'phát triển' nên được coi là bị hỏng. Các nhánh phát hành được đẩy đến các môi trường thử nghiệm, cho dù đó là môi trường QA hay môi trường dàn dựng. Nếu bạn cần, đẩy một nhánh tính năng cụ thể đến một môi trường.
Nếu bạn có nhiều nhánh tính năng cần được phát hành riêng lẻ nhưng đang được thử nghiệm cùng một lúc ..... \ _ (ツ) _ / ¯ .... quay lên một máy chủ khác? Có thể hợp nhất chúng lại với nhau thành một nhánh vứt đi ... cam kết sửa chữa / thay đổi cho các nhánh ban đầu và hợp nhất lại thành nhánh ném đi; làm phê duyệt cuối cùng và UAT trên các chi nhánh phát hành cá nhân.
4. Xóa các tính năng không được phê duyệt khỏi chi nhánh
Đây là những gì những suy nghĩ trên đang cố gắng tránh, bởi vì đây chắc chắn là điều đau đớn nhất để thử và làm. Nếu bạn may mắn, các tính năng đã được hợp nhất vào các nhánh phát triển hoặc thử nghiệm của bạn bằng cách sử dụng các cam kết hợp nhất. Nếu bạn không may mắn, các nhà phát triển đã cam kết trực tiếp với nhánh phát triển / thử nghiệm.
Dù bằng cách nào, nếu bạn đang chuẩn bị phát hành và có những thay đổi không được chấp thuận, bạn sẽ cần sử dụng Git để sao lưu những cam kết không được chấp thuận từ chi nhánh phát hành; ý tưởng tốt nhất là làm điều đó trước khi thử nghiệm bản phát hành.
May mắn nhất.