Ответ
Squash (сжатие коммитов) — это операция в Git, которая объединяет несколько последовательных коммитов в один новый коммит. Это делается для очистки истории перед слиянием ветки (например, feature-ветки в main).
Типичный сценарий использования:
- Вы завершили работу над фичей в отдельной ветке, сделав множество мелких коммитов ("WIP", "fix typo", "refactor").
- Перед пулл-реквестом вы хотите представить историю как один логичный коммит.
Как сделать squash (интерактивный rebase):
# Перебазируем последние 4 коммита текущей ветки
# HEAD~4 означает "4 коммита назад от текущего"
git rebase -i HEAD~4
В открывшемся редакторе для коммитов, которые нужно объединить, замените pick на squash (или s). Сохраните и закройте редактор. Git создаст один новый коммит с объединённым сообщением.
Плюсы:
- Чистая история: Основная ветка (
main,develop) не загромождается промежуточными коммитами. - Упрощение: Легче отслеживать изменения, откатывать или чери-пикать целые фичи.
Минусы и предостережения:
- Потеря деталей: Исчезает история промежуточных изменений и итераций.
- Force Push: После rebase требуется
git push --force-with-lease(безопаснее, чем--force), что опасно для общих веток. Делайте squash только в своей локальной или feature-ветке.