Что такое squash в Git

Ответ

Squash в Git — это объединение нескольких коммитов в один. Часто используется перед мержем веток для упрощения истории.

Как сделать squash:

  1. Во время интерактивного ребейза:
git rebase -i HEAD~3  # объединяем последние 3 коммита

В редакторе заменить pick на squash (или s) для коммитов, которые нужно объединить.

  1. При мерже с флагом --squash:
git merge --squash feature-branch
git commit -m "Объединённый коммит"

Плюсы:

  • Чистая история коммитов
  • Удобно для фиксации законченного функционала

Минусы:

  • Теряется детальная информация о промежуточных изменениях

Ответ 18+ 🔞

Слушай, а вот этот ваш squash в Git — это ж как взять кучу мелких записочек "сделал фикску", "ой, ещё фикску", "опечатку поправил" и склеить их в одну нормальную бумажку "починил баг с вылетом при нажатии на кнопку". Красота же!

Как эту магию провернуть:

  1. Через ребейз, будто бы ты режиссёр:

    git rebase -i HEAD~3  # Берём последние три коммита на разбор

    Тебе откроется текстовый редактор, где надо напротив лишних коммитов заменить pick на squash или просто s. Git их склеит в один, как котлеты в гамбургере.

  2. При слиянии ветки, одним махом:

    git merge --squash feature-branch
    git commit -m "Вся работа по новой фиче в одном красивом коммите"

    Всё, что накодил в feature-branch, схлопнется в один коммит в текущей ветке. Удобно, блядь!

Чем хорош этот фокус:

  • История в репозитории становится чистой и понятной, а не как дневник параноика. Одна фича — один коммит, ебать мои старые костыли!
  • Идеально, когда заливаешь готовый, протестированный кусок работы. Не засоряешь историю мусором.

Но есть и подвох, ёпта:

  • Всё, что было в промежуточных коммитах — детали, эксперименты, "ой, забыл импорт" — нахуй стирается из общей истории. Для финального кода — норм, а вот если нужно покопаться, как всё развивалось, — уже неудобно.

Короче, инструмент как молоток: если использовать по делу — получится аккуратный проект, а если херачить всё подряд — можно и по пальцам себе прилететь.