Комментарии (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 - Каждый коммит должен быть логически завершённым