Что такое Git merge?

Ответ

Git merge — это операция в системе контроля версий Git, предназначенная для объединения изменений из одной ветки разработки в другую. В результате слияния создается новый коммит (merge commit), если изменения не конфликтуют, или требуется ручное разрешение конфликтов.

Назначение: Интеграция функциональности или исправлений, разработанных в отдельных ветках, обратно в основную ветку или другую целевую ветку.

Основные типы слияния:

  1. Fast-forward merge (быстрое перемотка): Происходит, когда целевая ветка не имеет новых коммитов с момента ответвления. Git просто перемещает указатель целевой ветки на последний коммит сливаемой ветки, не создавая нового merge-коммита.
  2. Recursive merge (рекурсивное слияние): Стандартный тип слияния, который создает новый merge-коммит, имеющий двух родителей (последние коммиты обеих сливаемых веток). Используется, когда обе ветки имеют независимые изменения после общего предка.
  3. Squash merge (сжатое слияние): Объединяет все изменения из сливаемой ветки в один коммит в целевой ветке, но без сохранения истории коммитов исходной ветки. Полезно для очистки истории перед слиянием.

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

# Переключиться на целевую ветку (например, main), в которую нужно влить изменения
git checkout main

# Выполнить слияние с другой веткой (например, feature-branch)
git merge feature-branch

Важные нюансы:

  • Конфликты слияния: Если Git не может автоматически объединить изменения (например, одни и те же строки были изменены в разных ветках), он помечает файлы с конфликтами. Их необходимо разрешить вручную, после чего выполнить git add <файл> и git commit.
  • --no-ff: Опция для git merge, которая принудительно создает merge-коммит даже при возможности fast-forward слияния. Это сохраняет явную историю слияний.
  • git merge --abort: Команда для отмены текущего процесса слияния, если возникли конфликты и вы хотите начать заново или передумали.