How to squash commits and not to lose it

Nikita Pushkarskiy
Jul 24, 2017 · 2 min read

Признаюсь, мне нечасто приходится “сшивать” множество однотипных коммитов в один. Поэтому каждый раз, когда это происходит, я чувствую боль — приходится заново учиться. Ничего сложного нет, просто в этом механизме есть несколько контринтуитивных особенностей, из-за которых может бомбануть.


git rebase -i HEAD~N покажет последние N коммитов. Надо проставить squash для всех коммитов, кроме самого верхнего (= самого старого по времени), в который “сошьются” все остальные. То есть у самого верхнего останется pick. Совет: скорее всего у вас не настроен сторонний редактор для git, поэтому по команде rebase вы попадете в редактор vi. Следующая команда поможет вам заменить все слова pick на squash (потом не забудьте самому верхнему коммиту вернуть pick!):

ESC:%s/pick/squash/Enter

  1. Когда вы сохраните эти значения, git выдаст огромное сообщения для нового коммита — в нем будут перечислены все сообщения “сшиваемых” коммитов. Внимание: не удаляйте сообщения, сохраняйте всё как есть (можно изменить сообщения для pick-коммита, в который всё сольётся). Я так сперва удалил “лишние” коммит-сообщения, git сообщил что операция rebase успешно завершена, однако в локальной истории коммитов так ничего и не “сшилось”. Идиот.
  2. Это работает для коммитов, которые еще не запушены в удаленный репозиторий. Если вы попытаетесь “сшить” уже запушенные коммити, то операция rebase конечно сработает успешно, однако после этого git status будет явно просить вас сделать git pull. В итоге вы будете иметь историю как с кучей однотипных коммитов, так и с тем самым якобы сшитым коммитом. Не надо так.
  3. Чтобы в случае с уже запушенными коммитами всё было красиво, после успешного rebase небходимо сделать принудительный git push в в вашу ветку.

Nikita Pushkarskiy

Written by

Technical writer, self-taught programmer, IT factotum through life

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade