Ключевой вещью, которой должен был заниматься git-flow, была способность рассуждать о роли данной ветви, а также о том, от чего она разветвляется и в чем сливается.
В идеале все ветви возвращаются к той кодовой строке, с которой они были объединены. Обычно это слияние с основной линией (в git-flow это dev
). Ветка ветвей объектов и слияние с dev, ветвь релизов и слияние с dev (с дополнительным слиянием master
). Исправления веток и слияния от мастера (с этим дополнительным слиянием обратно в dev).
Каждая кодовая строка ответвляется от своего родителя и сливается обратно. Кодовая строка может извлекать код из других кодовых строк в любое время, если это необходимо.
Если ветвь из ветви функций - это «Я хочу исследовать этот способ решения проблемы в этой ветви функций» - прекрасно. Он ветвится из ветви функций, фиксирует некоторый код и сливается обратно с веткой функций (или отбрасывается).
- ответвление от фича
- изучить идею
- объединить в функцию
Однако, чего вы хотите избежать, это выглядит так:
- ответвление от обязательной функции
- работать над кодом
- объединить с dev после того, как обязательная функция завершена
- проверить работоспособность (и дополнительные коммиты) в ветви функций
- объединить с разработчиком
Причина в том, что начало и конец не совпадают - становится немного сложнее понять, что это такое и что было. Не невозможно, но для того, чтобы кто-то понял свою роль, требуется немного больше времени.
Однако, если это новая функция, которая зависит от кода, который еще не найден в dev, поток должен быть:
- ветка от разработчика
- объединить с обязательной функцией
- работать над кодом
- объединить с dev после того, как обязательная функция завершена
- проверить работоспособность (и дополнительные коммиты) в ветви функций
- объединить с разработчиком
Обратите внимание, что это начинается с ветки от dev и заканчивается слиянием с dev.
Все, что сказано, вероятно, лучшее, что нужно сделать, - это избежать объединения одной функции с другой. Разветвите эту функцию, сделайте все необходимые предварительные действия ... и подождите.
- ветка от разработчика
- работать над кодом
- объединить с dev после того, как обязательная функция завершена
- проверить работоспособность (и дополнительные коммиты) в ветви функций
- объединить с разработчиком
Это обеспечивает наиболее стабильный набор веток и кода.
Что-то, что следует рассмотреть для будущей работы, - это иметь возможность публиковать необходимые интерфейсы для взаимодействия с другими функциями - даже если код реализации не завершен. Это будет объединено с dev, и затем требуемая функция может работать от этих интерфейсов, как и будущая функция. Это, вероятно, позволит будущим функциям развиваться дальше (кодирование с интерфейсами, тестирование с использованием заглушек, которые реализуют интерфейсы), чем при ожидании слияния обязательной функции с dev.