Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между git merge и git rebase
Определение
Merge — объединение двух веток путем создания merge commit.
Rebase — перестановка (replaying) коммитов одной ветки на другую.
Git Merge
Что происходит:
Бранч feature: A---B---C
/
Бранч main: X---Y---Z
После merge:
Бранч feature: A---B---C
/ \
Бранч main: X---Y---Z---M (merge commit)
Команда:
git checkout main
git merge feature
Характеристики:
- Создает merge commit
- Сохраняет полную историю
- История нелинейна
- Безопаснее для публичных веток
Пример:
# На ветке main
git merge feature
# Создается коммит слияния
Git Rebase
Что происходит:
Бранч feature: A---B---C
/
Бранч main: X---Y---Z
После rebase:
Бранч main: X---Y---Z
Бранш feature: A'--B'--C'
Команда:
git checkout feature
git rebase main
Характеристики:
- Переписывает историю коммитов
- История линейна и чистая
- Создает новые коммиты (A', B', C')
- Не рекомендуется для публичных веток
Сравнение
| Характеристика | Merge | Rebase |
|---|---|---|
| История | Нелинейная | Линейная |
| Merge commit | Создается | Не создается |
| Безопасность | Высокая | Требует внимания |
| История коммитов | Сохраняется | Переписывается |
| Использование | Публичные ветки | Локальные ветки |
Когда использовать
Merge:
- Объединение feature branch в main
- Публичные ветки
- Когда важна полная история
git checkout main
git merge feature
git push origin main
Rebase:
- Обновление локальной feature branch
- Перед созданием pull request
- Очистка истории локально
git checkout feature
git rebase main
# Потом push с force (осторожно!)
git push origin feature --force-with-lease
Рабочий процесс
1. Работаете на feature branch:
git checkout -b feature/login
# Делаете коммиты
A---B---C
2. main обновилась:
main: X---Y---Z
feature: A---B---C
3. Обновляете feature from main (rebase):
git fetch origin
git rebase origin/main
# История чистая
main: X---Y---Z
feature: A'---B'---C'
4. Создаете pull request и мержите (merge):
git checkout main
git merge feature
# История: X---Y---Z---M(merge)
Практический пример для QA
При работе с тестовыми ветками:
# Создаете ветку для новых тестов
git checkout -b tests/new-api
# Пишете тесты
# Коммит 1: Add API endpoint tests
# Коммит 2: Add validation tests
# main тем временем развился
# Обновляете feature from main
git rebase origin/main
# История чистая, готовы к merge
git push origin tests/new-api
# Создаете PR и мержите в main
Правило: не переписывайте публичную историю
# Плохо — переписываем историю публичной ветки
git push origin main --force
# Хорошо — переписываем локальную ветку
git rebase main
Для QA-тестирования важно понимать оба подхода для эффективной работы с git в команде.