← Назад к вопросам
Что создаёт новый коммит: 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 merge | git 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создаёт множество новых коммитов, переписывая историю. Оба подхода имеют свои плюсы и минусы, и выбор зависит от контекста работы.