Git — Squash Commits: Объединение Всех Коммитов Ветки В Один

Каждый раз, работая над каким-то багом или новым функционалом, мы создаем отдельную ветку.

Обычно, в таких ветках делают множество коммитов, особо не уделяя много внимания написанию хороших комментариев, и просто комментируя изменения чем-то вроде «work in progress» или просто «WIP».

Перед тем, как сделать merge такой ветки в мастер, рекомендуется объединить все коммиты в один и сопроводить единственным комментарием резюмирующим изменения.

Далее я покажу, как объединить коммиты в Git при слиянии ветки с мастер.

Дельный Совет: Сделали опечатку? Без паники! Сообщение последнего коммита можно легко изменить! Читать далее →

Объединение и Слияние Коммитов в Git

Выполните следующие команды в Git, чтобы объединить все коммиты ветки в один коммит и сделать merge этой ветки в мастер, сопроводив единственным комментарием:

$ git checkout master
$ git merge --squash <branch_name>
$ git commit

Если вы работаете с удаленным Git-репозиторием, не забудьте сделать git push:

$ git push

Объединение Коммитов в Ветке

Также можно объединить все коммиты в ветке следующим образом:

$ git checkout <branch_name>
$ git reset --soft master
$ git add -A
$ git commit

В этом случае возможно потребуется форсировать push ветки:

$ git push -f 

В противном случае вы можете получить следующую ошибку:

error: failed to push some refs to ‘https://path/to/repo.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push —help’ for details.