В чём разница между командами Git merge и rebase?

«В чём разница между командами Git merge и rebase?» — вопрос из категории Git, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

merge и rebase — это две стратегии интеграции изменений из одной ветки в другую в Git. Их понимание критично для работы в команде, особенно при ревью кода тестов.

Аспект git merge git rebase
История Сохраняет полную историю слияний, создавая новый merge-коммит. «Переписывает» историю, перемещая коммиты текущей ветки на вершину целевой, создавая линейную историю.
Визуализация Граф истории показывает ветвления и слияния. История выглядит как прямая линия.
Безопасность Безопасна для публичных/общих веток, так как не изменяет существующую историю. Опасна для публичных веток, так как изменяет хеши коммитов, что может сломать работу коллег.
Использование Для слияния завершённых фич в основную ветку (например, main). Для обновления своей feature-ветки актуальными коммитами из main перед созданием пул-реквеста.

Типичный рабочий процесс QA-инженера с использованием обеих команд:

  1. Создаём ветку для нового набора тестов от main: git checkout -b feature/new-auth-tests.
  2. Пишем и коммитим тесты.
  3. Перед тем как отправить пул-реквест, обновляем свою ветку:
    git checkout main
    git pull origin main          # Получаем последние изменения из удалённого main
    git checkout feature/new-auth-tests
    git rebase main               # «Перебазируем» наши коммиты поверх актуального main

    Это устранит потенциальные конфликты и упростит историю.

  4. Отправляем ветку и создаём пул-реквест.
  5. После апрува и мержа пул-реквеста в main изменения интегрируются через merge (часто через squash merge).

Ключевое правило для QA: Никогда не делайте rebase для коммитов, которые уже были отправлены в общий репозиторий (push). Используйте rebase только для локальной чистки истории своей ветки перед её первой публикацией.