Ответ
Squash
(сжатие) в Git — это процесс объединения нескольких последовательных коммитов в один. Это делается для того, чтобы сделать историю изменений более чистой и читаемой.
Зачем это нужно?
- Чистая история: Вместо множества мелких коммитов (например, "fix typo", "add comment", "refactor") в истории остается один осмысленный коммит, описывающий всю проделанную работу над фичей.
- Атомарные изменения: Одна функциональность — один коммит. Это упрощает навигацию по истории и отмену изменений.
- Удобство Code Review: Ревьюеру проще анализировать один цельный коммит, чем разбираться в цепочке промежуточных правок.
Как это сделать (интерактивный rebase):
- Запустите интерактивный rebase для последних
N
коммитов:# Заменить 3 на нужное количество коммитов git rebase -i HEAD~3
-
В открывшемся текстовом редакторе вы увидите список коммитов. Оставьте
pick
для первого (самого старого) коммита, а для всех остальных, которые хотите объединить с ним, заменитеpick
наsquash
(илиs
).# Было: pick a1b2c3d Feature: add initial logic pick e4f5g6h Fix: typo in variable name pick i7j8k9l Refactor: improve performance # Стало: pick a1b2c3d Feature: add initial logic s e4f5g6h Fix: typo in variable name s i7j8k9l Refactor: improve performance
- Сохраните файл и закройте редактор. Git откроет новый редактор, где предложит вам создать новое сообщение для объединенного коммита.
Важно: Никогда не перезаписывайте историю (с помощью rebase
, squash
и т.д.) в общих ветках (main
, develop
), которые уже были отправлены (push
) в удаленный репозиторий. Это следует делать только в локальных или feature-ветках до их слияния.