Стратегии слияния в Git
Слияние в Git позволяет объединить две или более разработок, созданных с помощью ветки git, в одну ветку. Он включает изменения из названных коммитов и переводит их в текущую ветку. Перед включением опции слияния убедитесь, что принимающая ветвь и ветвь слияния обновлены с последними удаленными изменениями.
Что такое стратегии слияния?
Git предоставляет различные методы для объединения разных коммитов в базовый коммит. Эти методы называются стратегиями слияния . Эти базовые коммиты объединяются в коммиты слияния. Коммит слияния похож на обычный коммит, за исключением того, что у него есть два родительских коммита. Из нескольких стратегий процесса слияния git автоматически выберет одну, если она не указана явно. Этот автоматический выбор стратегии слияния основан на ветвях, предоставленных для слияния.
Существуют различные типы стратегий слияния:
- Перемотка вперед
- Рекурсивный
- Наш
- Осьминог
- Разрешить
- Поддерево
Git merge объединит несколько последовательностей коммитов в единую историю. В наиболее частых случаях использования git merge используется для объединения двух веток. Любую из предложенных стратегий можно использовать для выполнения процесса слияния в соответствии с потребностями проекта. Наиболее часто используемые стратегии - это быстрое прямое слияние и рекурсивное слияние .
Быстрое слияние вперед:
В этой наиболее часто используемой стратегии слияния история - это всего лишь одна прямая линия. Когда вы создаете ветку, делаете несколько коммитов в этой ветке, когда вы будете готовы к слиянию, на главном сервере не будет нового слияния. Таким образом, указатель мастера просто перемещается вперед, а история представляет собой одну прямую линию.
Команда:
$ git rebase
Рекурсивное слияние:
В рекурсивном слиянии после того, как вы разветвляетесь и делаете несколько коммитов, на « мастере » появляются новые оригинальные коммиты. Итак, когда пришло время слияния, git рекурсивно перебирает ветку и создает новый коммит слияния. Коммит слияния по-прежнему имеет двух родителей.
Команда:
$ git merge - нет-фф
Примечание: нет ничего правильного или неправильного ни в одной из стратегий, но с ускоренным слиянием вперед у вас есть прямая линия истории, а с рекурсивным слиянием она состоит из нескольких строк.
Быстрое слияние и рекурсивное слияние:
Перемотка вперед | Рекурсивный |
---|---|
Нет новых коммитов на мастере | Новые коммиты на мастере |
Линейная история | Поручить 2 родителям |
Нет коммитов слияния | Коммит слияния создан |
git rebase | git merge – no-ff |
Наше слияние:
Эта стратегия слияния разрешает любое количество головок, но результирующее дерево слияния всегда совпадает с деревом текущей ветки, фактически игнорируя все изменения из всех других ветвей. Он предназначен для того, чтобы заменить старую историю развития боковых веток.
Примечание. Эта стратегия отличается от опции -Xours и стратегии «рекурсивного » слияния.
Команда:
$ git merge -s наши
Осьминог слияние:
Стратегия Octopus Merge разрешает случаи с более чем двумя головами, но отказывается выполнять сложное слияние, которое требует ручного разрешения. Он в первую очередь предназначен для объединения заголовков тематических веток вместе. Это стратегия слияния по умолчанию при извлечении или слиянии более чем одной ветки.
Команда:
$ git merge -s осьминог
Разрешить слияние:
Эта стратегия может разрешить только две головы (то есть текущую ветвь и другую ветку, из которой вы вытащили), используя трехсторонний алгоритм слияния. Он пытается тщательно выявлять неоднозначности перекрестного слияния и считается в целом безопасным и быстрым.
Команда:
$ git merge -s разрешение
Примечание. ' -S resolve ' решает только тривиальные условия. Если код в разных ветках различается, конфликт необходимо решать вручную.
Слияние поддеревьев:
Это модифицированная рекурсивная стратегия. При объединении деревьев A и B, если B соответствует поддереву A, B сначала настраивается, чтобы соответствовать древовидной структуре A, вместо того, чтобы читать деревья на том же уровне. Эта корректировка также применяется к общему дереву предков.
Команда:
$ git merge -s поддерево
Вызов именованной стратегии слияния вручную
-s <Strategy> и –strategy = <Strategy>: эти стратегии могут быть предоставлены более одного раза, чтобы указать их в том порядке, в котором они должны быть опробованы. Если нет опции -s, вместо этого используется встроенный список стратегий ( git merge-recursive при слиянии одной головы, git merge-octopus в противном случае).
Команда:
$ git merge -s рекурсивный $ git merge --strategy = осьминог