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


142

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

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

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

Ответы:


157

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

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


54
Спасибо за помощь. Я не согласен с тем, что коммиты слияния всегда должны быть описательными. Причина, по которой я искал это, заключается в том, что автоматическое слияние, когда я выполняю извлечение, запрашивает у меня объяснение, почему слияние необходимо, что быстро становится необоснованным, поскольку это происходит даже тогда, когда у меня нет никаких изменений.
Брайан

10
Это также полезный ресурс для избежания такого поведения: longair.net/blog/2009/04/16/git-fetch-and-merge Вы должны избегать git pull; используйте, git merge --ff-onlyесли вы просто пытаетесь обновить, и вы не думаете, что у вас есть какие-либо локальные изменения; используйте, git merge --no-ffесли вы действительно пытаетесь объединить ветку.
Символ

6
Есть ли флаг конфигурации, чтобы отключить это? Раздражает необходимость каждый раз вводить --no-edit.
LandonSchropp

Потрясающие. Спасибо, что поделились @Christopher.
LandonSchropp

3
@SeanCoetzee: Это зависит от ваших $EDITORнастроек, но если вы используете git из коробки на OSX, это, вероятно, программа под названием 'vi' . Введите iдля входа в режим «ВСТАВКА»; введите ваше сообщение. Затем вы можете сохранить и выйти, нажав, ESCа затем набрав :wq.
Кристофер

58

Чтобы создать ярлык для использования в будущем:

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

[core]
    mergeoptions = --no-edit

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

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


13
Это не сработало для меня (git на OSX), и я установил его правильно, глядя на вывод git config --global core.mergeoptions.
jvannistelrooy

команда терминала должна быть такой, как показано нижеgit config core.mergeoptions --no-edit
С. Мерт

@SimsekMert, который будет редактировать только .gitconfig в текущем репозитории, а не глобально для каждого репозитория git
Даллас Кларк

@AbhishekGoel есть шанс, что вам может понадобиться перезапустить Терминал, чтобы изменения вступили в силу
Даллас Кларк

@jvannistelrooy есть шанс, что вам может понадобиться перезапустить Терминал, чтобы изменения вступили в силу
Даллас Кларк

11

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

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

    GIT_MERGE_AUTOEDIT=no

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


Можете ли вы объяснить, как это может отличаться от использования --no-editфлага?
Александр Миллс

2
Я не знаю функциональной разницы, но фактор удобства оправдывает это. --no-editФлаг должен быть повторен в командной строке с каждым использованием, так как он не появляется на работу в настройках , как описано в ответ Даллас Кларк здесь. Установка переменной среды - единственный способ, которым я знаю, чтобы сделать эту настройку постоянной.
Emackey
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.