← Назад к вопросам

Как несколько коммитов объединить в один

1.2 Junior🔥 61 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Объединение нескольких коммитов в один

Эта операция называется squashing (сжимание). Выполняется с помощью интерактивного rebase.

Способ 1: Interactive Rebase (наиболее гибкий)

Если нужно объединить последние N коммитов:

git rebase -i HEAD~3

Отворится интерактивный редактор с историей коммитов:

pick abc123 First commit
pick def456 Second commit
pick ghi789 Third commit

Изменяем на:

pick abc123 First commit
squash def456 Second commit
squash ghi789 Third commit

Сохраняем, и Git предложит отредактировать сообщение коммита.

Способ 2: Squash между веткой и текущей веткой

Если нужно объединить все коммиты относительно другой ветки:

git rebase -i main

Способ 3: Git merge --squash

Альтернативный способ при слиянии веток:

git checkout main
git merge --squash feature-branch
git commit -m "Feature: Add new functionality"

Все коммиты из feature-branch будут сжаты в один коммит при слиянии с main.

Практический пример:

git log --oneline -5
ab123 Fix typo
cd456 Add validation
ef789 Add feature
gh012 Base commit

git rebase -i HEAD~3

pick ab123 Fix typo
squash cd456 Add validation
squash ef789 Add feature

Важные команды в интерактивном rebase:

  • pick — использовать коммит
  • reword — использовать коммит, отредактировав сообщение
  • squash (s) — объединить с предыдущим
  • fixup (f) — объединить без сохранения сообщения
  • exec — выполнить shell-команду
  • drop — удалить коммит

Работа с remote:

Если коммиты уже отправлены в remote:

git rebase -i HEAD~3
git push origin branch-name --force-with-lease

--force-with-lease безопаснее чем --force.

Best Practice:

  • Используй squashing перед merge для чистой истории
  • Не squashируй коммиты на shared ветках
  • Используй --force-with-lease вместо --force
  • Каждый коммит должен быть логически завершённым
Как несколько коммитов объединить в один | PrepBro