Ответ
Squash в Git — это объединение нескольких коммитов в один. Часто используется перед мержем веток для упрощения истории.
Как сделать squash:
- Во время интерактивного ребейза:
git rebase -i HEAD~3 # объединяем последние 3 коммита
В редакторе заменить pick на squash (или s) для коммитов, которые нужно объединить.
- При мерже с флагом
--squash:
git merge --squash feature-branch
git commit -m "Объединённый коммит"
Плюсы:
- Чистая история коммитов
- Удобно для фиксации законченного функционала
Минусы:
- Теряется детальная информация о промежуточных изменениях
Ответ 18+ 🔞
Слушай, а вот этот ваш squash в Git — это ж как взять кучу мелких записочек "сделал фикску", "ой, ещё фикску", "опечатку поправил" и склеить их в одну нормальную бумажку "починил баг с вылетом при нажатии на кнопку". Красота же!
Как эту магию провернуть:
-
Через ребейз, будто бы ты режиссёр:
git rebase -i HEAD~3 # Берём последние три коммита на разборТебе откроется текстовый редактор, где надо напротив лишних коммитов заменить
pickнаsquashили простоs. Git их склеит в один, как котлеты в гамбургере. -
При слиянии ветки, одним махом:
git merge --squash feature-branch git commit -m "Вся работа по новой фиче в одном красивом коммите"Всё, что накодил в
feature-branch, схлопнется в один коммит в текущей ветке. Удобно, блядь!
Чем хорош этот фокус:
- История в репозитории становится чистой и понятной, а не как дневник параноика. Одна фича — один коммит, ебать мои старые костыли!
- Идеально, когда заливаешь готовый, протестированный кусок работы. Не засоряешь историю мусором.
Но есть и подвох, ёпта:
- Всё, что было в промежуточных коммитах — детали, эксперименты, "ой, забыл импорт" — нахуй стирается из общей истории. Для финального кода — норм, а вот если нужно покопаться, как всё развивалось, — уже неудобно.
Короче, инструмент как молоток: если использовать по делу — получится аккуратный проект, а если херачить всё подряд — можно и по пальцам себе прилететь.