Я все еще пытаюсь перейти от мерзавца к мерзавцу.Я знаю, что могу использовать любую функцию git в git-flow, но меня больше всего интересует, что она обрабатывает автоматически.
Давайте предположим, что есть два разработчика Алиса и Боб, работающие над функциями A и B соответственно.Когда Алиса готова, она может сделать git flow feature finish A
, чтобы создать коммит слияния в своей локальной ветке develop
на основе коммита C. Теперь, если Боб заканчивает свою функцию в то же время, и он получил то же самое, его коммит слияниятакже будет основан на C. Теперь, если Алиса нажмет, а затем снова загрузит Боба, ему придется слить или перебазировать, и мы получим нелинейную историю на ветке develop
, в случае, если он сливается.
Правильно ли это до сих пор, или git-flow как-то автоматически обрабатывает эту ситуацию?Если есть какой-то автоматический механизм, что нужно будет настроить для его работы?
Самое простое решение, вероятно, состоит в том, чтобы всегда извлекать develop
перед завершением функций.Однако я не уверен, что это действительно возможно, в зависимости от способа совместного использования хранилища (может быть недоступно в это время).
РЕДАКТИРОВАТЬ (разъяснения проблемы):
Как показывают ответы, мой пример не был ясен.Итак, сначала картина того, что, на мой взгляд, является проблемой:
C - это начальный коммит в ветви разработки.
Алиса создает некоторую работу над функциями в ветви функций:
develop feature/A
| |
v v
C-A1-A2-A3-A4
В то же время Боб также работает для другой функции
C-A1-A2-A3-A4
\
B1-B2-B3-B4
Теперь Алиса заканчивает функцию и добавляется коммит слияния для разработки (я хочу это).
A1-A2-A3-A4
/ \
C- - - - MA
Теперь Боб заканчивает эту функцию, и снова добавляется коммит слияния для разработки (я также хочу, чтобы, просто в другом месте:
A1-A2-A3-A4
/ \
C- - - - MA <- develop for Alice
\
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
Однако теперь Алиса или Боб должны слиться с разработкой, создавая дополнительный коммит:
A1-A2-A3-A4
/ \
C- - - - MA-MAB <- I don't want this MAB commit
\ /
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
То, что я хотел бы иметь вместо этого, было бы примерно таким:
A1-A2-A3-A4
/ \
C- - - - MA-MB
\ /
B1-B2-B3-B4- -
Как вы можете видеть, история все еще нелинейна, однако основная линияветвь разработки содержит только коммиты слияния из функций (и никаких дополнительных коммитов слияния, как в другом случае).
Что мне нравится в этом, так это то, что вы можете легко следить за изменениями в истории и видеть,удлинить до прежних характерных веток или, если они были слияниями в развитии.Вся эта информация может быть получена непосредственно из DAG.
Также, если вы используете хорошие сообщения для ваших коммитов слияния при разработке, во втором случае вы можете легко получить список изменений, всегда следуя первому родителю при разработке.Однако во втором случае вам иногда нужно следить только за первым родителем, а иногда за несколькими родителями.И я не могу найти простой способ, когда делать то, что я мог бы кодировать.