Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
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 — это фундаментальный инструмент для командной разработки, позволяющий эффективно управлять параллельными потоками разработки.