Обе команды интегрируют изменения одной ветки в другую, но по-разному:
- git merge создает merge-коммит и сохраняет историю как есть (нелинейную);
- git rebase переносит коммиты ветки поверх другой ветки, переписывая их и делая историю линейной.
Золотое правило: не выполнять rebase публичных (общих) веток.