При слиянии ветки не обязательно указывать no-ff если оно нужно?
Во всяких интернетах (в т.ч. на английском SO) пестрят картинки, что если мы хотим сохранить историю коммитов ветки, которую вливаем и не переводить указатель чисто вперёд, то нужно ставить --no-ff. Типичные картинки
Однако тут говорится о том, что если в ветке уже были коммиты, то --no-ff в любом случае будет происходить
Теперь изменения бранча testbranch идут в отдельной ветке даже без указания no fast-forward.
Вопрос вполне логичный и простой: в итоге, если я нахожусь в какой-то ветке и нужно слить другую и чтобы коммиты сделанные в другой ветке согласно истории принадлежали именно второй, то если я уже делал коммиты в первой, то указаывать --no-ff не обязательно? А если я нахожусь на ветке test1 сливаю себе dev, чтобы обновить данные, делаю ещё небольшую правку, коммит, пуш, а потом перехожу на dev и вливаю себе эту ветку test1 то тоже уже не надо указывать флаг --no-ff?
Мне важна история всегда. Важно чтобы коммиты отображались именно на тех ветках, где были сделаны, а не шли в одной ветке, как прямая дорога.
Ответы (1 шт):
К сожалению ваша ссылка «тут» недоступна из моего региона, а ваше цитат не полная.
git может проводить слияние тремя способами:
--ff— (по умолчанию) попытаться выполнить перемотку (fast forward), если не удалось, то создать коммит слияния.--no-ff— всегда создавать коммит слияния.--ff-only— попытаться выполнить перемотку, если не удалось, завершить ошибкой.
Подробности: https://git-scm.com/docs/git-merge#Documentation/git-merge.txt---ff
Перемотка может быть выполнена только если ветка, в которую идёт слияние стоит на том коммите, который есть во вливаемой ветке (как правило это точка ветвления, но не обязательно).
Если после точки ветвления в обеих ветках есть свои коммиты (отсутствующие во второй), то будет создан коммит слияния. В этом случае совершенно не обязательно указывать параметр --no-ff. Но и мешать он не будет.
А если я нахожусь на ветке
test1сливаю себеdev, чтобы обновить данные, делаю ещё небольшую правку, коммит, пуш, а потом перехожу наdevи вливаю себе эту веткуtest1то тоже уже не надо указывать флаг--no-ff?
Если после вливание dev в test1 в ветке dev не было новых коммитов, то без указания --no-ff будет выполнена перемотка. Потому что коммит ветки dev находится в ветке test1, вы его сами влили. А так как вы ранее вливали dev в test1, то в истории коммиты из test1 будут отображаться как будто они были сделаны в основной ветке, а коммиты из dev — как из ветки разработки. Тут настоятельно рекомендуется делать --no-ff.
Для того, чтоб не задумываться ставить --no-ff или нет, лучше всегда ставить. А чтоб не забывать, можно указать в настройках git, что по умолчанию нужно использовать --no-ff, а не --ff. Делается это командой git config --add merge.ff false
Подробности: https://git-scm.com/docs/git-config#Documentation/git-config.txt-mergeff

