Git

Параметр Git Merge -no-ff

Параметр Git Merge -no-ff

Понимание опции Git Merge no-ff

Возможность простого слияния git - одна из его сильных сторон. Во время слияния git использует слияние с перемоткой вперед, когда замечает, что HEAD текущей ветки является предком коммита, который вы пытаетесь слить. При слиянии с перемоткой вперед нет новой фиксации. Git просто перемещает указатель. Если такое поведение нежелательно, вы можете использовать флаг no-ff, чтобы создать новую фиксацию для слияния.

Как выглядит слияние с Fast-Forward и без него

После перемотки вперед ваша история git будет выглядеть так:

C0 -> C1 -> C2-> C3

Для того же количества коммитов вот история слияния без перемотки вперед:

В первом случае нет никаких указаний на то, что было какое-либо ветвление. Во втором случае история показывает фиксацию C4, чтобы указать, где произошло слияние.

Рассмотрение примера

Вы создадите репозиторий git, создадите ветку, а затем попробуете слияние с перемоткой вперед и без нее.

Раздел 1: Настройка

Во-первых, вы можете создать репозиторий git, выполнив следующие действия:

$ mkdir my_project
$ cd my_project
$ git init
$ прикоснитесь к.текст
$ git add -A
$ git commit -m "C0: Добавление.текст"

Теперь давайте создадим ветку под названием features и зафиксируем несколько изменений:

Особенности ветки $ git
Возможности $ git checkout
$ touch b.текст
$ git add -A
$ git commit -m "C1: Добавление b.текст"
$ touch c.текст
$ git add -A
$ git commit -m "C2: Добавление c.текст"
$ touch d.текст
$ git add -A
$ git commit -m "C3: Добавление d.текст"

Раздел 2: Слияние с быстрой пересылкой

Вернемся к основной ветке и объединим в нее ветку функций:

$ git checkout master
$ git функции слияния

Выход:

Обновление 08076fb… 9ee88eb
Перемотка вперед
б.txt | 0
c.txt | 0
d.txt | 0
Изменено 3 файла, 0 вставок (+), 0 удалений (-)
создать режим 100644 b.текст
создать режим 100644 c.текст
создать режим 100644 d.текст

Если вы проверите историю, вы увидите:

$ git log --oneline
9ee88eb C3: Добавление d.текст
c72b92c C2: Добавление c.текст
2e4039e C1: Добавление b.текст
08076fb C0: Добавление.текст

Итак, все коммиты из ветки функций теперь находятся в главной ветке. Если вы продолжите вносить изменения в мастер, невозможно узнать, когда ветка функций была объединена с ним.

Раздел 3: Без быстрой пересылки

Повторите раздел 1 для новой папки.

Затем попробуйте слияние без перемотки вперед:

$ git checkout master
$ git merge --no-ff функция

В текстовом редакторе git по умолчанию откроется следующее:

Слияние ветки 'особенности'
# Пожалуйста, введите сообщение фиксации, чтобы объяснить, почему это слияние необходимо,
# особенно если он объединяет обновленный апстрим в тематическую ветку.
#
# Строки, начинающиеся с '#', будут игнорироваться, а пустое сообщение прерывается
# коммит.

Измените комментарии. В этом случае вы можете просто добавить «C4:» перед «Объединить функции ветки». Результат должен выглядеть так:

Слияние по «рекурсивной» стратегии.
б.txt | 0
c.txt | 0
d.txt | 0
Изменено 3 файла, 0 вставок (+), 0 удалений (-)
создать режим 100644 b.текст
создать режим 100644 c.текст
создать режим 100644 d.текст

Теперь, если вы посмотрите историю, она должна выглядеть следующим образом:

$ git log --oneline
e071527 C4: Объединить ветку "функции"
bb79c25 C3: Добавление d.текст
692bd8c C2: Добавление c.текст
a0df62a C1: Добавление b.текст
7575971 C0: Добавление.текст

Вы можете видеть, что, хотя у вас есть точно такие же изменения, эта версия слияния имеет дополнительную фиксацию C4, которая означает слияние ветки функций в master.

Заключение

Флаг git merge no-ff помогает создать более читаемую историю. Он позволяет ставить теги, которые четко показывают, где произошло слияние. Это может сэкономить ваше время и усилия при отладке.

Дальнейшее изучение:

Рекомендации:
Эмуляция щелчков мыши с помощью мыши без щелчка в Windows 10
Использование мыши или клавиатуры в неправильной позе или чрезмерное использование может привести к множеству проблем со здоровьем, включая растяжение...
Добавьте жесты мыши в Windows 10 с помощью этих бесплатных инструментов
В последние годы компьютеры и операционные системы сильно эволюционировали. Было время, когда пользователям приходилось использовать команды для навиг...
Контроль и управление перемещением мыши между несколькими мониторами в Windows 10
Диспетчер мыши с двумя дисплеями позволяет контролировать и настраивать движение мыши между несколькими мониторами, замедляя ее движения возле границы...