Почему git запрашивает у меня сообщение фиксации слияния после вытягивания?

Недавно, после любого git pull, git начал порождать мой текстовый редактор и запрашивать сообщение фиксации слияния. Сообщение фиксации уже предварительно заполнено, и мне просто нужно сохранить и закрыть окно, чтобы завершить извлечение.

В прошлом слияние выполнялось автоматически со стандартным сообщением о коммите (наподобие Merge branch 'dev' of remote.com:/repo into dev).

Недавно я обновил git до версии 1.7.11.3 (через доморощенный), но не могу придумать ничего другого, что я мог бы сделать, чтобы изменить это поведение. Это настройка или есть какой-то другой способ вернуться к тому, что было?


person shanebonham    schedule 31.07.2012    source источник


Ответы (3)


В git 1.7.10 разработчики git решили, что коммиты слияния могут быть сделаны слишком легко. Как поясняется в этой записи в блоге, принудительная интерактивная фиксация поведение сообщения должно сделать эти сообщения фиксации более подробными и может снизить общую частоту ненужных слияний.

Вы можете использовать флаг --no-edit, чтобы избежать такого поведения, но не делайте этого. Коммиты слияния, как и любые коммиты в историю, должны быть хорошо сконструированы. Ваша история должна быть только полезной.

person Christopher    schedule 31.07.2012
comment
Спасибо за помощь. Я не согласен с тем, что коммиты слияния всегда должны быть описательными. Причина, по которой я искал это, заключается в том, что автоматические слияния всякий раз, когда я вытягиваю, просят меня объяснить, почему слияние необходимо, что быстро становится неразумным, поскольку оно делает это даже тогда, когда у меня нет никаких изменений. - person Brian; 13.11.2012
comment
Это также полезный ресурс, чтобы избежать такого поведения: longair. net/blog/2009/04/16/git-fetch-and-merge Вам следует избегать git pull; используйте git merge --ff-only, если вы просто пытаетесь обновиться и не думаете, что у вас есть какие-либо локальные изменения; используйте git merge --no-ff, если вы на самом деле пытаетесь объединить ветку. - person Glyph; 25.04.2013
comment
Есть ли флаг конфигурации, чтобы отключить это? Надоедает каждый раз вводить --no-edit. - person LandonSchropp; 20.06.2013
comment
Потрясающий. Спасибо, что поделились @Christopher. - person LandonSchropp; 20.06.2013
comment
Пока мы на этом - противоположный вопрос, я использую более старую версию Git (1.7.0.4) на одной машине, могу ли я установить поведение 1.7.10 по умолчанию? - person Kos; 21.08.2013
comment
@Кос: Хммм. Попробуйте флаг --no-ff git merge. Это приведет к фиксации слияния при каждом слиянии, что может дать вам то, что вы хотите. Затем вы можете сделать его постоянным, установив git config --global merge.ff false. man git-config должен предоставить вам более подробную информацию. У меня нет простого способа вернуться к версии 1.7.0.4 на этой машине, и поэтому я не могу проверить это предложение. - person Christopher; 21.08.2013
comment
Я всегда извлекаю с --ff-only и обычно сливаюсь только тогда, когда хочу --no-ff, но я спросил о настройке запрашивать сообщение фиксации перед каждым слиянием. - person Kos; 22.08.2013
comment
@Kos: Ах, к сожалению, я не знаю, как получить то, что вы хотите, в 1.7.0.4. Хотя может кто-то другой. Это сделало бы достойный ТАК вопрос сам по себе. - person Christopher; 22.08.2013
comment
Как отредактировать текст и закрыть это окно редактирования в сеансе терминала Mac. Кажется, что бы я ни делал, я должен выйти и повторно выполнить фиксацию вручную. - person Sean; 12.12.2013
comment
@SeanCoetzee: это зависит от вашей настройки $EDITOR, но если вы используете git из коробки в OSX, это, вероятно, программа под названием 'vi'. Введите i, чтобы войти в режим INSERT; введите ваше сообщение. Затем вы можете сохранить и выйти, нажав ESC, а затем набрав :wq. - person Christopher; 13.12.2013
comment
Если ваша команда git merge находится в скрипте для автоматизации, рассмотрите возможность использования флага git merge -m для предоставления полезной информации для журналов фиксации. - person broc.seib; 16.07.2014
comment
Вы правы относительно того, почему, но увещевание продолжать мириться с этим раздражением бесполезно - за это проголосовали. Я переключу это на голосование, если вы уберете избиение бровей. - person Chris Moschini; 03.11.2020
comment
Просто примечание: --no-edit следует сразу после ключевого слова pull, например: git pull --no-edit update master. Потерял час, пытаясь понять, почему это не работает. - person aleskva; 08.05.2021

Чтобы создать ярлык для будущего использования, выполните одно из следующих действий:

Отредактируйте свой ~/.gitconfig следующим образом:

[core]
    mergeoptions = --no-edit

Или выполните следующее в Терминале

git config --global core.mergeoptions --no-edit

person Dallas Clark    schedule 14.12.2014
comment
У меня это не сработало (git на OSX), и я правильно настроил его, глядя на вывод git config --global core.mergeoptions. - person JacobF; 15.01.2015
comment
команда терминала должна быть такой, как показано ниже git config core.mergeoptions --no-edit - person simsek; 26.11.2018
comment
@SimsekMert, который будет редактировать .gitconfig только в текущем репозитории, а не глобально для каждого репозитория git - person Dallas Clark; 26.11.2018
comment
@AbhishekGoel, возможно, вам придется перезапустить Терминал, чтобы изменения вступили в силу. - person Dallas Clark; 26.11.2018
comment
@jvannistelrooy, возможно, вам придется перезапустить Терминал, чтобы изменения вступили в силу. - person Dallas Clark; 26.11.2018

Во-первых, обратите внимание на предупреждения в ответе Кристофера выше.

Затем, если вы все еще хотите отключить автоматическое редактирование сообщения фиксации слияния, установите эту переменную среды:

    GIT_MERGE_AUTOEDIT=no

Эта переменная среды и ее значение «нет» задокументированы на странице документа git merge. Рекомендуется использовать его только в сценариях, которые должны объединяться не в интерактивном режиме, но, конечно, его можно установить как часть вашей среды оболочки, чтобы сделать его эффекты более постоянными.

person emackey    schedule 27.01.2017
comment
Можете ли вы объяснить, чем это может отличаться от использования флага --no-edit? - person Alexander Mills; 01.09.2018
comment
Я не знаю функциональной разницы, но фактор удобства делает это стоящим. Флаг --no-edit должен повторяться в командной строке при каждом использовании, так как он не работает в настройках, как описано в ответе Далласа Кларка здесь. Установка переменной среды — это единственный известный мне способ сохранить эту настройку. - person emackey; 01.09.2018