Как объединить (сквошить) несколько коммитов Git в один?

«Как объединить (сквошить) несколько коммитов Git в один?» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для объединения нескольких последних коммитов в один используется интерактивный ребейз (git rebase -i).

Пошаговая инструкция:

  1. Запустите интерактивный ребейз для последних N коммитов (например, 10):
    git rebase -i HEAD~10
  2. В открывшемся редакторе вы увидите список коммитов. Оставьте первый коммит с ключевым словом pick, а для всех остальных, которые нужно объединить, замените pick на squash или s.
    pick a1b2c3d Начальный коммит
    squash e4f5g6h Второй коммит
    squash i7j8k9l Третий коммит
    # ... и так далее
  3. Сохраните файл и закройте редактор.
  4. Git откроет новое окно для редактирования итогового сообщения коммита. Здесь можно оставить одно сообщение, объединив или переписав историю из всех сквошенных коммитов.
  5. Сохраните и закройте — коммиты будут объединены.

Альтернативный способ — git merge --squash: Если вы хотите объединить все коммиты из ветки feature в один коммит при мерже в main:

git checkout main
git merge --squash feature
git commit -m "Объединённый коммит из ветки feature"

Важно: Ребейз переписывает историю. Не используйте его для коммитов, которые уже были отправлены в общий репозиторий.