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

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

2.2 Middle🔥 181 комментариев
#Git

Комментарии (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')
  • Не рекомендуется для публичных веток

Сравнение

ХарактеристикаMergeRebase
ИсторияНелинейнаяЛинейная
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 в команде.

В чем разница git команд между merge и rebase? | PrepBro