Зачем перед слиянием ветки f1 в ветку develop, нужно сливать ветку develop в ветку f1?

При изучении стандартов ведения веток гита, я натыкаюсь на такую рекомендацию: "Перед слиянием ветки f1 в ветку develop, нужно сливать ветку develop в ветку f1".
Такая рекомендация обосновывается следующими причинами:
  • Все конфликты должны решатся на стороне ветки f1;
  • Актуализация ветки f1;


Но у меня возникает такой вопрос. Если при решении конфликтов на стороне ветки f1, выбирать реализации из ветки f1, то разве при обратном сливании ветки f1 в ветку develop не возникнут ли эти конфликты вновь? Или я что то не правильно понял? Является ли такая рекомендация лишним действием?

Пример такой рекомендации есть в этом документе(Supporting Branches -> Feature Branches -> 2-й обзац -> 2-е предложение):
https://gist.github.com/digitaljhelms/4287848
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
Или я что то не правильно понял?

Да, вы не понимаете сути слияния веток в Git.

Начнём с того, что когда вы сливаете ветки, по большому счёту не так уж важно какую ветку в какую вы будете сливать. Вы В ЛЮБОМ случае создаёте мёрж-коммит, и создание этого мёрж-коммита (и соответственно разрешение конфликтов которое происходит при создании этого коммита) подразумевает, что вы соединили вместе две ветки. Это значит что начиная с мёрж-коммита все последующие коммиты (дочерние к нему) будут иметь изменения из ОБОИХ веток. Уже не будет разницы между тем что было сделано в первой и во второй ветке, отныне "они едины" (c).

Другой вопрос в том, в какую ветку поместить этот мёрж-коммит и УКАЗАТЕЛЬ какой из веток СДВИНУТЬ на новый мёрж-коммит. Теоретически, мы можем сдвинуть оба указателя, но в большинстве случаев нам достаточно сдвига лишь в одной ветке (и нередко только в одной из веток, в вашем случае f1, мы имеем право двигать указатель).

Когда вы попытаетесь сделать "обратное сливание f1 в develop", если в develop ещё не успело появиться новых коммитов (не являющихся предками созданного вами мёрж-коммита), то на самом деле никакого сливания и НЕ БУДЕТ. Ведь у вас УЖЕ есть коммит, учитывающий изменения в ОБОИХ ветках. Достаточно лишь передвинуть указатель ветки develop на этот коммит. Другое дело, что решение о том, что это можно и нужно сделать, приняв тем самым изменения в ветке f1 в ветку develop, принимает мейнтенер ветки develop, а это вовсе не обязательно тот же человек, что и работающий с веткой f1.

Почему мы сначала сдвигаем указатель ветки f1? Ну очевидно потому, что это ветка в которой ведётся разработка, и обычно принято принимать в общую ветку (коей видимо у вас является develop) уже полностью готовые правки. Готовые - это в том числе интегрированные с текущим состоянием кодовой базы. Обычно это задача работающего в ветке f1 - порезолвить все конфликты и интегрироваться со свежим состоянием develop, чтобы мейнтейнер проекта мог максимально быстро и безболезненно вмёржить f1 в develop.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@D3Nd3R
Обычно есть ветка, в которую разрабы сливают все свои изменения (у нас это develop). При слаянии develop в f1 разработчик может решить все конфликты и провести тесты в своей ветке. А уже затем отправить pull request в develop.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы