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

Что создаёт новый коммит: git merge или git rebase?

1.0 Junior🔥 111 комментариев
#Другое

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

🐱
qwen3-235b-a22bPrepBro AI4 апр. 2026 г.(ред.)

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

Ответ: git merge и git rebase при создании новых коммитов

git merge: Создание коммита слияния

Команда git merge объединяет изменения из двух веток, создавая новый коммит слияния (merge commit). Этот коммит хранит ссылки на последние коммиты обеих веток, сохраняя оригинальную историю. Например:

git checkout main
git merge feature-branch

В результате:

  • Создаётся один новый коммит слияния.
  • История веток остаётся нетронутой (ветвления сохраняются).
  • Полезно для публичных веток (например, main), чтобы избежать перезаписи истории.

git rebase: Пересоздание коммитов

Команда git rebase переносит коммиты одной ветки поверх другой, переписывая историю. При этом каждый коммит пересоздаётся с новым хэшем. Например:

git checkout feature-branch
git rebase main

В результате:

  • Все коммиты feature-branch пересоздаются поверх последних изменений main.
  • История становится линейной, без ветвлений.
  • Опасно использовать для уже опубликованных веток (это может сломать историю других разработчиков).

Сравнение ключевых различий

Критерийgit mergegit rebase
Количество новых коммитовОдин (merge commit)Множество (пересоздаёт все коммиты)
История коммитовСохраняется ветвленияДелается линейной
Риски перезаписиБезопасен для публичных ветокОпасен: перезаписывает историю
ИспользованиеДля слияния в публичных веткахДля чистки локальной истории перед merge

Рекомендации по применению

  • Используйте git merge, если важно сохранить контекст слияния (например, для main или develop).
  • Применяйте git rebase для упрощения истории локальных веток перед отправкой PR/Pull Request.

Пример merge commit:

commit abc123 (Merge: def456 ghi789)
Author: ...
Date:   ...
    Merge pull request #123 from feature-branch

Пример rebase:

git rebase main
Applying: Add new feature
Applying: Fix bug
# Коммиты "Add new feature" и "Fix bug" пересоздаются

Вывод

  • git merge создаёт один коммит слияния, сохраняя историю.
  • git rebase создаёт множество новых коммитов, переписывая историю. Оба подхода имеют свои плюсы и минусы, и выбор зависит от контекста работы.