← Назад к вопросам

Что такое git merge?

1.2 Junior🔥 252 комментариев
#Git и CI/CD

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Git Merge

Git merge — операция объединения двух или более веток (branches) в одну. Это один из основных инструментов командной разработки, позволяющий интегрировать изменения из разных веток в основную ветку проекта.

Основной концепт

Вы работаете в отдельной ветке feature/auth, создаёте коммиты с новой функциональностью, а затем хотите объединить эти изменения в ветку main. Для этого используется git merge:

git checkout main
git merge feature/auth

Fast-forward merge создаёт новый коммит, объединяющий истории обеих веток.

Типы Merge

1. Fast-Forward Merge

Это самый простой случай. Если main не имел изменений с момента создания feature/auth, Git просто перемещает указатель main на последний коммит feature/auth:

main:  A → B → C
feature/auth:     → D → E
После merge: A → B → C → D → E

Команда:

git merge feature/auth  # Fast-forward

2. Three-Way Merge

Используется, когда обе ветки имеют расходящиеся истории:

main:     A → B → C → F
feature:        → D → E
После merge: A → B → C → F → M (merge commit)
                      ↑ ↑
                   родители D → E

Git создаёт специальный коммит слияния (merge commit):

git merge feature/auth

3. Squash Merge

Сгруппировать все коммиты из ветки в один:

git merge --squash feature/auth
git commit -m "Add authentication feature"

Полезно для чистой истории коммитов.

Разрешение конфликтов

Если в одних и тех же файлах были сделаны конфликтующие изменения, Git потребует ручного разрешения:

# После попытки merge
Auto-merging lib/auth.dart
CONFLICT (content): Merge conflict in lib/auth.dart

Отредактируйте файл:

<<<<<<< HEAD
  String? getCurrentUser() {
    return _user?.id;
  }
=======
  String? getUserId() {
    return _user?.id;
  }
>>>>>>> feature/auth

Выберите нужный вариант и отредактируйте:

  String? getCurrentUser() {
    return _user?.id;
  }

Затем:

git add lib/auth.dart
git commit -m "Merge feature/auth: resolved conflicts"

Merge vs Rebase

Merge создаёт коммит слияния и сохраняет полную историю:

  • Плюсы: полная история развития, легче отследить
  • Минусы: история может быть запутанной

Rebase переносит коммиты на новое основание:

  • Плюсы: чистая линейная история
  • Минусы: изменяет историю, может быть сложнее в командной работе
# Merge: история сохраняется
git merge feature/auth

# Rebase: история переписывается
git rebase feature/auth

Лучшие практики

1. Перед merge обновите ветку:

git fetch origin
git merge origin/main

2. Используйте Pull Request:

# Вместо прямого merge в GitHub/GitLab
git push origin feature/auth
# Создайте PR через веб-интерфейс

3. Удаляйте слитые ветки:

git branch -d feature/auth  # Локально
git push origin --delete feature/auth  # На сервере

4. Используйте описательные сообщения:

git merge -m "Merge feature/auth: add login screen"

5. Проверьте тесты перед merge:

flutter test
flutter analyze

Отмена merge

Если merge пошёл не так:

# Отменить не закоммитанный merge
git merge --abort

# Откатить уже закоммитанный merge
git revert -m 1 <commit_hash>

Git merge — это фундаментальный инструмент для командной разработки, позволяющий эффективно управлять параллельными потоками разработки.