Объяснение
Ветка — изменяемая ссылка на commit, HEAD показывает текущую позицию. Fast-forward передвигает указатель, если история линейна; merge объединяет разошедшиеся ветви. Создание ветки не копирует все файлы заново.
Задача для самостоятельного решения
Почему merge иногда не создаёт отдельный commit?
Показать разбор ответа
Когда целевая ветвь является предком исходной, достаточно fast-forward. Если нужна явная точка объединения, политика команды может требовать merge commit.