Squash коммитов

Тема дорожной карты · Изучи Git

Squash коммитов — это процесс объединения нескольких коммитов в один, чтобы сделать историю коммитов более чистой и понятной. Это особенно полезно при работе над крупными проектами, где история коммитов может стать запутанной из-за множества мелких изменений. Squash позволяет упростить историю коммитов, делая её более логичной и удобной для понимания.

Как это работает

Squash коммитов переписывает историю ветки, переигрывая коммиты на новую базу. Процесс начинается с команды git rebase main, которая берёт коммиты вашей ветки и переигрывает их поверх текущего main, создавая линейную историю без merge-коммитов. Интерактивный rebase (git rebase -i) позволяет не только squash коммиты, но и редактировать, переставлять и удалять их. Однако важно помнить, что rebase деструктивен, и коммиты получают новые SHA, что может вызвать проблемы при работе с расшаренными ветками.

Когда применять

Squash коммитов особенно полезен перед открытием pull request (PR). Локальная ветка должна быть переиграна на основную (main) перед тем, как её будут рассматривать другие участники команды. Это позволяет создать чистую историю коммитов, где каждое логическое изменение представлено одним коммитом. Interactive rebase также полезен для squash'а WIP-коммитов и очистки сообщений перед push. Если ветка уже была запушена, можно использовать опцию --force-with-lease, чтобы обновить её.

Типичные ошибки

Типичные ошибки при squash коммитов включают rebase расшаренных веток и force-push, что может привести к тому, что все клоны ломаются. Также ошибкой может стать использование interactive rebase и разрешение конфликтов на каждом шаге, что может привести к длинной цепочке конфликтов. В некоторых случаях merge может быть более простым решением. Еще одна распространенная ошибка — потеря коммитов в путанице rebase. В таких случаях можно воспользоваться reflog, чтобы вернуть утраченные коммиты.

Связанные понятия

Полезные ресурсы