Разбор

Иногда при слиянии ветки в master нас не интересует вся история коммитов, накопившаяся во время разработки. Мы хотим объединить все изменения в одно коммит-сообщение. Для этого в Git есть флаг --squash.

Например: мы закончили работу над веткой, сделали в ней несколько коммитов и хотим смерджить её в master одним коммитом. Переходим в master, а затем используем --squash.

git checkout master

Мы делаем git merge --squash ветки app-refactoring в мастер:

git merge --squash app-refactoring

Если мы сразу выполним git log, то ничего не увидим.

* 38e8211 - (app-refactoring) add app footer (1 hour ago) <Oleksii Myzgin>
* d13b462 - update README (1 hour ago) <Oleksii Myzgin>
* 74708e6 - add title (1 hour ago) <Oleksii Myzgin>
* a4a7ec9 - (HEAD -> master, origin/master) add into section (1 hour ago) <Oleksii Myzgin>

Сначала нам нужно сделать git commit

Squashed commit of the following:

commit 38e821152b9eee9943dba75e1c2ca1e88c91af9a
Author: Oleksii Myzgin <oleksii.myzgin@email.com>
Date:

    add app footer

commit d13b462ea304c95a23fb8a23d9107c398d04344f
Author: Oleksii Myzgin <oleksii.myzgin@email.com>
Date:

    update README

commit 74708e65040e05e485f79883bc1cae7f152b5492
Author: Oleksii Myzgin <oleksii.myzgin@email.com>
Date:

    add title

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch is up to date with 'origin/master'.
#
# Changes to be committed:
#       modified:   README.md
#       modified:   src/App.js

Теперь мы видим сжатый коммит для всех сообщений коммита. В самом вверху можем определить желаемое сообщение этого коммита - add app-refactoring. После того, как мы сохраним изменение и выполним git log - увидим новый коммит add app-refactoring, который содержит все коммиты нашей ветки app-refactoring.

* 6111633 - (HEAD -> master) add app-refactoring (7 minutes ago) <Oleksii Myzgin>
| * 38e8211 - (app-refactoring) add app footer (1 hour ago) <Oleksii Myzgin>
| * d13b462 - update README (1 hour ago) <Oleksii Myzgin>
| * 74708e6 - add title (1 hour ago) <Oleksii Myzgin>
|/
* a4a7ec9 - (origin/master) add into section (1 hour ago) <Oleksii Myzgin>

Ветка app-refactoring не была смерджена в мастер в привычном смысле. Был создан новый коммит, который включает в себя все изменения из ветки app-refactoring.