Слияние (merge)

Слияние веток в Git

Что такое git merge?

git merge – это команда в Git, которая используется для объединения изменений из одной ветки в другую. Основная цель git merge – интеграция изменений, сделанных в другой ветке, в текущую ветку, обеспечивая сохранение полной истории изменений и разрешение конфликтов, если они возникают.

Основные характеристики

  • Объединение изменений: git merge позволяет объединить изменения из другой ветки в текущую ветку.
  • Сохранение истории: В отличие от rebase, merge сохраняет историю коммитов в том виде, в каком они были изначально.
  • Создание коммита слияния: При выполнении слияния создаётся новый коммит слияния, если слияние не является fast-forward.

Типы слияний

  1. Fast-forward: Если текущая ветка не содержит коммитов, созданных после последнего общего коммита с веткой, которую вы хотите слить, Git просто перемещает указатель текущей ветки вперед. В этом случае новый коммит слияния не создаётся.

    git merge <ветка>
    
  2. Recursive merge: Если обе ветки содержат уникальные коммиты после последнего общего коммита, создаётся новый коммит слияния. Это поведение по умолчанию для большинства слияний.

    git merge <ветка>
    

Синтаксис

git merge <ветка>
  • <ветка> – имя ветки, изменения из которой вы хотите объединить в текущую ветку.

Пример использования

  1. Обычное слияние:
    git checkout main
    git merge feature-branch
    
    Эта команда объединяет изменения из ветки feature-branch в ветку main.

Полезные флаги и опции

  • --no-ff: Отключает fast-forward слияние и всегда создаёт новый коммит слияния.

    git merge --no-ff feature-branch
    
  • --squash: Объединяет изменения из ветки в рабочую директорию, но не создаёт коммит слияния. После этого вам нужно вручную закоммитить изменения.

    git merge --squash feature-branch
    
  • --no-commit: Выполняет слияние, но не делает коммит автоматически. Это позволяет вам сделать дополнительные изменения перед созданием коммита.

    git merge --no-commit feature-branch
    
  • --abort: Прерывает слияние и возвращает репозиторий в состояние до начала слияния.

    git merge --abort
    

Пример работы с конфликтами

  1. Выполните git merge:

    git merge feature-branch
    
  2. Если возникли конфликты, Git уведомит вас об этом. Разрешите конфликты, отредактировав соответствующие файлы.

  3. После разрешения конфликтов добавьте изменённые файлы:

    git add <файл-с-конфликтом>
    
  4. Завершите процесс слияния:

    git commit
    

Примечание

Использование git merge может привести к конфликтам, если изменения в целевой ветке пересекаются с вашими локальными изменениями. В этом случае вам придётся разрешить конфликты вручную.