Một điều quan trọng mà git-Flow dự định giải quyết là khả năng suy luận về vai trò của một nhánh nhất định và những gì nó phân nhánh và hợp nhất với nó.
Lý tưởng nhất là tất cả các chi nhánh hợp nhất trở lại dòng mã mà chúng được hợp nhất từ đó. Đây thường là một sự hợp nhất từ dòng chính (trong dòng git này là dev
). Tính năng nhánh nhánh và hợp nhất từ dev, phát hành nhánh nhánh và hợp nhất từ dev (có thêm hợp nhất vào master
). Hot fix chi nhánh và hợp nhất từ master (với sự hợp nhất bổ sung đó trở lại dev).
Mỗi nhánh mã từ và hợp nhất trở lại cha mẹ của nó. Một dòng mã có thể lấy mã từ các bộ mã khác bất cứ lúc nào nếu cần thiết.
Nếu nhánh từ nhánh tính năng là "Tôi muốn khám phá cách khắc phục sự cố trong nhánh tính năng đó" - hoàn toàn tốt. Nó phân nhánh từ nhánh tính năng, cam kết một số mã và hợp nhất trở lại nhánh tính năng (hoặc bị loại bỏ).
- chi nhánh từ tính năng
- khám phá ý tưởng
- hợp nhất để tính năng
Tuy nhiên, những gì bạn muốn tránh là một cái gì đó trông giống như:
- chi nhánh từ tính năng bắt buộc
- làm việc trên mã
- hợp nhất từ dev khi tính năng được yêu cầu hoàn tất
- xác minh chức năng (và các cam kết bổ sung) trong nhánh tính năng
- hợp nhất để phát triển
Lý do là bắt đầu và kết thúc không khớp - điều này khiến cho việc hiểu điều này là và khó khăn hơn một chút. Không phải là không thể, nhưng nó chỉ khiến người khác mất thêm một chút thời gian để hiểu vai trò của nó.
Tuy nhiên, nếu đây là tính năng mới phụ thuộc vào mã chưa được tìm thấy trong dev, luồng sẽ là:
- chi nhánh từ nhà phát triển
- hợp nhất từ tính năng bắt buộc
- làm việc trên mã
- hợp nhất từ dev khi tính năng được yêu cầu hoàn tất
- xác minh chức năng (và các cam kết bổ sung) trong nhánh tính năng
- hợp nhất để phát triển
Lưu ý rằng điều này bắt đầu với một nhánh từ dev và kết thúc bằng một hợp nhất thành dev.
Tất cả những gì đã nói, có lẽ điều tốt nhất để làm là tránh thực hiện hợp nhất từ tính năng này sang tính năng khác. Chi nhánh tính năng, làm bất cứ điều gì sơ bộ là cần thiết ... và chờ đợi.
- chi nhánh từ nhà phát triển
- làm việc trên mã
- hợp nhất từ dev khi tính năng được yêu cầu hoàn tất
- xác minh chức năng (và các cam kết bổ sung) trong nhánh tính năng
- hợp nhất để phát triển
Điều này cung cấp tập hợp các nhánh và mã ổn định nhất.
Một cái gì đó để xem xét cho công việc trong tương lai sẽ có một tính năng để xuất bản các giao diện cần thiết cho khả năng tương tác với các tính năng khác - ngay cả khi mã triển khai chưa hoàn tất. Điều này sẽ được hợp nhất với dev và sau đó tính năng bắt buộc có thể hoạt động trên các giao diện đó như tính năng trong tương lai. Điều này có thể sẽ cho phép tính năng trong tương lai tiến xa hơn (mã hóa các giao diện, kiểm tra các gốc thực thi giao diện) so với khi nó phải chờ tính năng bắt buộc để hợp nhất để phát triển.