User Tools

Site Tools


git_squash

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
git_squash [2021/03/08 12:41] – создано chifekgit_squash [2023/09/14 06:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Как сжимать коммиты в Git с помощью git squash ====== ====== Как сжимать коммиты в Git с помощью git squash ======
  
-Для начала давайте разберемся: что же это вообще такое — ''git squash''+===== Для начала давайте разберемся: что же это вообще такое — ''git squash'' ===== 
  
 Git squash — это прием, который помогает взять серию коммитов и уплотнить ее. Например, предположим: у вас есть серия из N коммитов и вы можете путем сжатия преобразовать ее в один-единственный коммит. Сжатие через ''git squash'' в основном применяется, чтобы превратить большое число малозначимых коммитов в небольшое число значимых. Так становится легче отслеживать историю Git. Git squash — это прием, который помогает взять серию коммитов и уплотнить ее. Например, предположим: у вас есть серия из N коммитов и вы можете путем сжатия преобразовать ее в один-единственный коммит. Сжатие через ''git squash'' в основном применяется, чтобы превратить большое число малозначимых коммитов в небольшое число значимых. Так становится легче отслеживать историю Git.
 +
 +
 +Также этот прием используется при объединении ветвей. Чаще всего вам будут советовать всегда сжимать коммиты и выполнять перебазирование с родительской ветвью (например, master или develop). В таком случае история главной ветки будет содержать только значимые коммиты, без ненужной детализации.
 +
 +
 +===== Как именно делать git squash =====
 +
 +Возьмем для примера следующую историю Git:
 +
 +{{::1_8tdy65ipblsjpr9y1nnffw.png?600|}}
 +
 +
 +Здесь видны последние три коммита. В сообщениях к ним поясняется, что мы добавили новый файл и какое-то содержимое. Лучше заменить их одним единственным коммитом о том, что произошло добавление нового файла с некоторым содержимым. Итак, давайте посмотрим, как сжать последние три коммита в один:
 +
 +<code>git rebase -i HEAD~3</code>
 +
 +''git rebase -i'' — интерактивный инструмент, который помогает сжимать коммиты. У него много возможностей, но давайте сосредоточимся на git squash.
 +Если вы не очень хорошо знакомы с перебазированием — не волнуйтесь. Сжатие коммитов — одна из самых простых операций, которые выполняются через интерактивный git-rebase (т.е. ''git rebase -i''). ''HEAD~3'' означает, что мы берем последние три коммита.
 +
 +{{::1_wqktbymzgplhkq6qkhvpja.png?600|}}
 +
 +
 +Далее откроется редактор. Посмотрите, ''rebase -i'' охватывает только последние три коммита, и обратите внимание на количество опций. Нас, однако, интересует только ''squash''. Давайте же приведем все к одному коммиту.
 +
 +{{::1_g9uxr-6wbqeio1cvqb0ttq.png?600|}}
 +
 +Как видите, для сжатия мы отметили последние два коммита с помощью команд squash или s.
 +
 +В примере, приведенном выше, коммиты, предназначенные для сжатия, будут слиты с основным коммитом — тем, который отмечен командой ''pick''. Отметив коммиты, сохраните изменения в редакторе.
 +Далее ''rebase -i'' снова откроет редактор для ввода сообщения о коммите, как на картинке ниже:
 +
 +{{:1_ouvpxartj-ad_f4ckdrnwq.png?600|}}
 +
 +
 +Отредактировав и сохранив сообщения, можете закрыть редактор. Обратите внимание: строки, которые начинаются с #, будут проигнорированы. После этого журнал Git будет выглядеть следующим образом:
 +
 +
 +{{::1_jiu1q7jwercneobst4rf4q.png?600|}}
 +
 +
 +Здесь изменилось сообщение о коммите, и обратите внимание: три коммита “склеились” в один. Также изменился хэш коммита. Через ''git rebase'' всегда создается новый коммит, содержащий соответствующие изменения.
 +
 +===== Так что используйте этот инструмент с осторожностью. =====
 +
 +Помните: сжатие коммитов меняет историю Git, поэтому не рекомендуется сжимать ветвь, если вы уже отправили ее в удаленный репозиторий. Всегда выполняйте сжатие до того, как отправить пуш с изменениями.
git_squash.1615207318.txt.gz · Last modified: 2023/09/14 06:06 (external edit)