Главная Категории Контакты Поиск

git squash

Как объединить все коммиты в один и перенести их в `master` с помощью `--squash`.

Git·23.07.2019·читать 2 мин 🤓·Автор: Alexey Myzgin

Часто, когда мы заканчиваем работу над своей веткой, нам нужно сделать merge с основной веткой (в данном примере это master) единым коммитом. Если нас не интересуют все коммит сообщения которые создавались во время разработки. Так как они уже неактуальны, и сейчас мы хотим объединить все изменения в одно коммит сообщение, то в git есть хорошая функция - autosquash, которая позволит это сделать.

Например: мы закончили работу над своей веткой, сделали в ней несколько различных коммитов и хотим объединить ветку в master. Нам всё равно на все коммит сообщения, так как мы хотим объединить их в один коммит. Для начала перейдем в ветку master, а затем используем autosquash.

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 не была объединена merge в мастер. Было создано новое сообщение коммита, которое является суммой всех коммитов, которые мы создали в ветке app-refactoring.

Website, name & logo
Copyright © 2022. Alex Myzgin