Menu
Coddy logo textTech

Git Rebase vs Merge

Последнее обновление

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

Золотое правило: никогда не делайте rebase коммитов, которые другие уже получили. Попробуйте оба в терминальном playground — настоящая оболочка в вашем браузере.

Бок о бок

Behaviorgit mergegit rebase
Форма историиВетвящаяся, с коммитом слиянияЛинейная
Переписывает коммитыНетДа
Безопасно на общих веткахДаНет
Сохраняет точную историюДаНет
Легко отследить, когда что слилосьДаСложнее

Синтаксис

CommandWhat it does
git merge featureСлить feature в текущую ветку
git merge --no-ff featureВсегда создавать коммит слияния
git rebase mainПереиграть коммиты текущей ветки поверх main
git rebase -i HEAD~3Интерактивно отредактировать последние 3 коммита
git rebase --abortОтменить выполняемый rebase

Git rebase vs merge: вопросы и ответы

В чём разница между git rebase и git merge?
git merge объединяет две ветки, создавая новый коммит слияния, который соединяет их истории, сохраняя точную запись того, что произошло. git rebase, напротив, перемещает ваши коммиты так, что они переигрываются поверх другой ветки, создавая прямолинейную историю, но переписывая эти коммиты с новыми хешами. Merge сохраняет историю; rebase переписывает её ради чистоты.
Когда использовать merge, а когда rebase?
Используйте merge для интеграции завершённой ветки (особенно общей) — это безопасно и неразрушающе. Используйте rebase, чтобы привести в порядок собственные локальные коммиты перед тем, как ими делиться, или чтобы обновить ветку функциональности поверх свежего main ради чистой истории. Многие команды делают rebase локально, а затем merge в main.
В чём золотое правило rebase?
Никогда не делайте rebase коммитов, на которых другие уже основали свою работу, — как правило, всего, что вы запушили в общую ветку. Поскольку rebase переписывает коммиты, это вынуждает всех остальных примирять разошедшуюся историю. Свободно делайте rebase на локальных, незапушенных коммитах; используйте merge (или revert) для всего, что уже стало общедоступным.
Что вызывает меньше конфликтов — rebase или merge?
Ни то, ни другое не избегает конфликтов, но они всплывают по-разному. Merge разрешает все конфликты сразу, в коммите слияния. Rebase может попросить вас разрешать конфликты коммит за коммитом по мере того, как каждый переигрывается. Общий объём работы схож; rebase просто растягивает его.
Могу ли я попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить git merge и git rebase в настоящей оболочке в вашем браузере — ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово охватывает слияние и rebase.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ