Почему `git merge <branch>--squash` не делает коммит? - PullRequest
0 голосов
/ 22 мая 2018

При обычном слиянии, например, git merge <branch>, git создает коммит слияния и обновляет HEAD текущей ветки до этого коммита.

При выполнении сквош-слияния, например git merge <branch> --squash однако, он не делает коммит, говоря (на чистом слиянии):

Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested

Что за этим стоит?Мне кажется, это неожиданная разница между обычным слиянием и слиянием сквоша.Для меня было бы более интуитивно понятно, если бы разница only между обычным слиянием и слиянием сквоша заключалась в том, что сглаживание сквоша совершает слияние.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Такого рода вопрос , почему вопрос действительно должен быть отправлен тому, кто первым написал команду;только они действительно знают.

Базовая реализация ленива: она проходит по тому же пути кода, что и обычное слияние, но пропускает запись файла MERGE_HEAD, а затем завершает работу рано, чтобы избежать прохождения кода, который мог бы сделатькоммит слияния.

Если вы используете опцию --no-commit, код проходит почти по тому же пути.Фактически, управляющей переменной для этого является option_commit, и установка --squash очищает option_commit, как если бы вы работали с --no-commit.

Если --squash не очистить option_commit, похоже, существующий путь будет жаловаться на сбой автоматического объединения.Так что может просто быть ленью.

0 голосов
/ 22 мая 2018

В чем причина этого?

В черновом сообщении о фиксации слияния будут содержаться все ваши сжатые сообщения из другой ветви.Примерно так:

Squashed commit of the following:

commit 2fb77b77f813501ae2c8159e7bf751c216572a57
Author: Your Name <you@example.com>
Date:   Tue May 22 22:47:50 2018 +0200

    Drop baz

commit 894f1ef07af29d25c4716dce9db4402032f854d4
Author: Your Name <you@example.com>
Date:   Tue May 22 22:47:39 2018 +0200

    Fix bar

commit 7f60998ab1949e9e8db9229f9ef9e7c0333cd04f
Author: Your Name <you@example.com>
Date:   Tue May 22 22:47:19 2018 +0200

    Add foo

Обычно вы хотите настроить это сообщение перед его фиксацией.


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

git merge <branch> --squash && git commit --no-edit
...